pthreads (1)

CGIの作成が止まってしまってるけど、仕事で必要になりそうなのでpthreadsの勉強でもしようかと。

などの特徴があるらしい。オライリーの本にはコンテキストスイッチやスケジューリングのことも書いてあるけど、スレッドだってコンテキストスイッチは発生するだろうしスケジューリングポリシーもあるだろうから、あまりその辺のオーバーヘッドは変わらないんじゃないか、という気もしますがどうなんでしょ。

とりあえず書いてみる。

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

void f1(int *);
void f2(int *);
int cnt = 0;

int main(void){
     pthread_t thread1, thread2;
     pthread_create(&thread1, NULL, (void *)f1, &cnt);
     pthread_create(&thread2, NULL, (void *)f2, &cnt);
     
     pthread_join(thread1, NULL);
     pthread_join(thread2, NULL);
     
     printf("cnt=%d\n", cnt);
     return 0;
}

void f1(int *p)
{
     int i;
     for(i=0; i<5; i++){
          *p += 10;
          printf("f1\n");
          usleep(1);
     }
}

void f2(int *p)
{
     int i;
     for(i=0; i<5; i++){
          *p += 20;
          printf("f2\n");
          usleep(2);
     }
}

実行結果

f1
f2
f1
f2
f1
f2
f1
f2
f1
f2
cnt=150

なるほど。

今回はlinuxで試したけど、windows用pthreadsとして
http://sources.redhat.com/pthreads-win32/
こんなのもあるらしい。時間があったら試したい。