pthreadをcygwinで試す
戻る
#include <stdio.h>
#include <sys/types.h>
#include <pthread.h>
/** $Id: pthread.html,v 1.1 2009/06/22 16:12:21 kishi Exp kishi $ **/
void *
function (void *arg)
{
int i;
pid_t pid;
pthread_t thread_id;
pid = getpid ();
thread_id = pthread_self ();
for (i = 0; i < 5; i++) {
sleep (1);
printf ("PID=%d : THREAD_ID=%d i=%d\n", pid, thread_id, i);
}
return (arg);
}
int
main (int argc, char** argv)
{
char* errmsg = "スレッド生成に失敗しました!";
pid_t p_pid;
pthread_t threadA, threadB;
int status;
void *result;
p_pid = getpid ();
printf ("PID=%d\n", p_pid);
status = pthread_create (&threadA, NULL, function, (void *) NULL);
if (status != 0) {
fprintf (stderr, "%s %s", errmsg, strerror (status));
} else {
printf ("threadAが開始されました...\n");
}
status = pthread_create (&threadB, NULL, function, (void *) NULL);
if (status != 0) {
fprintf (stderr, "%s %s", errmsg, strerror (status));
} else {
printf ("threadBが開始されました...\n");
}
pthread_join (threadA, &result);
pthread_join (threadB, &result);
printf ("終了しました!\n");
return 0;
}
■以下実行結果
$ !make && ./pthread-test.exe
make pthread-test && ./pthread-test.exe
cc pthread-test.c -o pthread-test
PID=1088
threadAが開始されました...
threadBが開始されました...
PID=1088 : THREAD_ID=7013976 i=0
PID=1088 : THREAD_ID=7013792 i=0
PID=1088 : THREAD_ID=7013976 i=1
PID=1088 : THREAD_ID=7013792 i=1
PID=1088 : THREAD_ID=7013976 i=2
PID=1088 : THREAD_ID=7013792 i=2
PID=1088 : THREAD_ID=7013976 i=3
PID=1088 : THREAD_ID=7013792 i=3
PID=1088 : THREAD_ID=7013976 i=4
PID=1088 : THREAD_ID=7013792 i=4
終了しました!
戻る