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
終了しました!
戻る inserted by FC2 system