From owner-FreeBSD-users-jp@jp.FreeBSD.org Mon Dec 24 18:15:01 2001
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) id fBO9F1b61199;
	Mon, 24 Dec 2001 18:15:01 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from mhigw.mhi.co.jp (mhikeeper.mhi.co.jp [202.32.46.1])
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) with ESMTP/inet id fBO9F0T61189
	for <FreeBSD-users-jp@jp.freebsd.org>; Mon, 24 Dec 2001 18:15:00 +0900 (JST)
	(envelope-from tetsu-t@mbd.sphere.ne.jp)
Received: from naswgw2.nasw.mhi.co.jp by mhigw.mhi.co.jp (3.7W) id SAA05108; Mon, 24 Dec 2001 18:14:59 +0900 (JST)
Received: from y1005s01.nasw.mhi.co.jp by naswgw2.nasw.mhi.co.jp (8.8.8/3.6W/01122119) id SAA30092; Mon, 24 Dec 2001 18:14:58 +0900
Received: from 172.18.64.65 by y1005s01.nasw.mhi.co.jp (InterScan E-Mail VirusWall NT); Mon, 24 Dec 2001 18:17:02 +0900
Received: from hfs.smet.nasw.mhi.co.jp (hfs.smet.nasw.mhi.co.jp [172.18.97.5])
	by smetgw.smet.nasw.mhi.co.jp (8.9.3/3.7W) with ESMTP id SAA25692
	for <FreeBSD-users-jp@jp.freebsd.org>; Mon, 24 Dec 2001 18:14:54 +0900 (JST)
Received: from SMTP (nts [172.18.97.4])
	by hfs.smet.nasw.mhi.co.jp (8.9.3+3.2W/3.7W) with SMTP id SAA04870
	for <FreeBSD-users-jp@jp.freebsd.org>; Mon, 24 Dec 2001 18:14:23 +0900 (JST)
Received: from pisces.local ([172.18.97.93]) by 172.18.97.4
  (Norton AntiVirus for Internet Email Gateways 1.0) ;
  Mon, 24 Dec 2001 09:14:24 0000 (GMT)
Received: from localhost (tetsu-t@mbd.sphere.ne.jp@pisces.local)
	by pisces.local (8.11.6/8.11.6) with ESMTP id fBO9EMg11282
	for <FreeBSD-users-jp@jp.freebsd.org>; Mon, 24 Dec 2001 18:14:22 +0900 (JST)
Date: Mon, 24 Dec 2001 18:11:37 +0900 (JST)
Message-Id: <20011224.181137.39157638.tetsu.t@smet.nasw.mhi.co.jp>
To: FreeBSD-users-jp@jp.FreeBSD.org
X-Mailer: Mew version 2.1 on Emacs 21.1 / Mule 5.0
 =?iso-2022-jp?B?KBskQjgtTFobKEIp?=
From: Tetsuo TAKAHASHI <tetsu-t@mbd.sphere.ne.jp>
Mime-Version: 1.0
Content-Type: Multipart/Mixed;
 boundary="--Next_Part(Mon_Dec_24_18:11:37_2001_990)--"
Content-Transfer-Encoding: 7bit
Reply-To: FreeBSD-users-jp@jp.FreeBSD.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+011218
X-Sequence: FreeBSD-users-jp 66168
Subject: [FreeBSD-users-jp 66168] [Q] pthread program
Errors-To: owner-FreeBSD-users-jp@jp.FreeBSD.org
Sender: owner-FreeBSD-users-jp@jp.FreeBSD.org
X-Originator: tetsu-t@mbd.sphere.ne.jp

----Next_Part(Mon_Dec_24_18:11:37_2001_990)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit


$B9b66$G$9!#(B

$B0J2<$N4D6-$G!"(Bpthread $B$N%5%s%W%k%W%m%0%i%`$r=q$$$F$$$k$N$G$9$,!"(B
$B$I$&$b;W$$DL$j$K$$$-$^$;$s(B...$B!#(B

OS : FreeBSD 4.4 STABLE


Solaris 2.5 $B$G!"<B9T$7$?>l9g$O;W$$DL$j$N7k2L$K$J$k$N$G$9$,(B...$B!#(B
# POSIX(-lpthread)$B$G(B link

$B$I$J$?$+!"%"%I%P%$%9$rD:$1$k$H9,$$$G$9!#(B

$B%W%m%0%i%`$rE:IU$7$^$9!#(B

$B$A$J$_$K!"4|BT$9$k=PNO7k2L(B(Solaris$B$G=PNO(B)$B$O!"(B
% ./test
MsgID=350
Default Stack Size = 0
New Stack Size = 3145728
main:message xmit thread created stat=0
msg send thread awaked
MsgID=350
Msg=> 0
Msg=> 1
Msg=> 2
Msg=> 3
Msg=> 4
Msg=> 5
Msg=> 6
Msg=> 7
Msg=> 8
Msg=> 9
Msg=> quit
join success

$B$G$9!#(B

FreeBSD$B$N>l9g$O!"(B
% ./test
MsgID=350
Default Stack Size = 0
New Stack Size = 3145728
main:message xmit thread created stat=0

$B$G!";_$^$C$F$7$^$$$^$9!#(B


--
// $B9b66(B $BE/IW(B<Tetsuo TAKAHASHI> tetsu-t@mbd.sphere.ne.jp

----Next_Part(Mon_Dec_24_18:11:37_2001_990)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="test.c"

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#define MSG_KEY   2002
#define DATA_SIZE 256
typedef struct {
  long mtype;
  char buf[DATA_SIZE];
} MSG_t;

void *
send_thread(void *arg)
{
  MSG_t b;
  int msgid;
  int i;
  int ret = 0;

  printf("msg send thread awaked\n");

  /* Get Msg Key */
  if ((msgid = msgget((key_t)MSG_KEY, 0644)) < 0) {
    printf("Can not get msg id\n");
    exit(-1);
  } else {
    printf("MsgID=%d\n", msgid);
  }

  /* Send Message */
  b.mtype = 1;
  for (i = 0; i < 10; i++) {
    sprintf(b.buf, "%d", i);
    ret = msgsnd(msgid, &b, strlen(b.buf)+1, 0);
    if ( ret < 0 ) {
      printf("Error: msg send\n");
      exit(-1);
    } else {
      sleep(1);
    }
  }
  strcpy(b.buf, "quit");
  ret = msgsnd(msgid, &b, (size_t)DATA_SIZE, 0);
  if ( ret < 0 ) {
    printf("Error: msg send\n");
    exit(-1);
  }

  return NULL;
}

int
main(int ac, char *av[])
{
  pthread_t main_th = 0;
  pthread_attr_t attr;
  unsigned int stack_size = 0;
  int  ret = 0;
  MSG_t a;
  int msgid;
  int exist;
  int st;

  /* Get Msg Key */
  if ((msgid = msgget((key_t)MSG_KEY, 0644|IPC_CREAT)) < 0) {
    printf("Can not get msg id\n");
    exit(-1);
  } else {
    printf("MsgID=%d\n", msgid);
  }

  /* Modify Stack Size */
  ret = pthread_attr_init(&attr);
  ret = pthread_attr_getstacksize(&attr, &stack_size );
  printf("Default Stack Size = %d\n", stack_size);
  stack_size = 3 * 1024 * 1024;
  ret = pthread_attr_setstacksize(&attr, stack_size );
  ret = pthread_attr_getstacksize(&attr, &stack_size );
  printf("New Stack Size = %d\n", stack_size);

  /* Create Thread */
  ret = pthread_create(&main_th, &attr,
		       send_thread, (void *)NULL);
  printf("main:message xmit thread created stat=%d\n", ret);

  /* Recive Message */
  exist = 1;
  while (exist) {
    ret = msgrcv(msgid, &a, (size_t)DATA_SIZE, 0, 0);
    if ( ret < 0 ) {
      printf("Error: msg rcv\n");
      exit(-1);
    } else {
      sleep(1);
    }
    printf("Msg=> %s\n", a.buf);
    if (strcmp(a.buf, "quit") == 0) {
      exist = 0;
    }
  }
  if ( main_th != 0 ) {
    ret = pthread_join(main_th, NULL);
    if ( ret != 0 ) {
      printf("join error %d\n", ret);
    } else {
      printf("join success\n");
    }
  }

  st = msgctl(msgid, IPC_RMID, (struct msqid_ds *)0);

  return st;
}

----Next_Part(Mon_Dec_24_18:11:37_2001_990)----

