pthread 2つのスレッドを動かす
提供: C言語入門
スポンサーリンク
pthreadで複数のスレッドを作成することは、1つのスレッドを作成する方法と何も変わりません。1つのスレッドを作成したい場合には、pthread 1つのスレッドを動かすをご参照ください。C言語でpthreadを用いて、複数(2つ)のスレッドを実行します。
概要
2つのスレッドを作成するには、pthread_createを2回呼び出すだけ、です。 2つのスレッドを作成したら、2回join(pthread_join)でスレッドを回収しなければなりません。 スレッドが同時に動いていることをわかりやすくするために、スレッドの中で、sleep(usleep)させています。
実行結果から2つめのスレッドの関数が先に終わっていることがわかります。
pthread2.c の例
ソースコード pthread2.c
#include <stdio.h> #include <stdlib.h> #include <err.h> #include <errno.h> #include <string.h> #include <pthread.h> #include <unistd.h> void f1(void); void f2(void); int main(int argc, char *argv[]) { pthread_t thread1, thread2; int ret1,ret2; ret1 = pthread_create(&thread1,NULL,(void *)f1,NULL); ret2 = pthread_create(&thread2,NULL,(void *)f2,NULL); if (ret1 != 0) { err(EXIT_FAILURE, "can not create thread 1: %s", strerror(ret1) ); } if (ret2 != 0) { err(EXIT_FAILURE, "can not create thread 2: %s", strerror(ret2) ); } printf("execute pthread_join thread1\n"); ret1 = pthread_join(thread1,NULL); if (ret1 != 0) { errc(EXIT_FAILURE, ret1, "can not join thread 1"); } printf("execute pthread_join thread2\n"); ret2 = pthread_join(thread2,NULL); if (ret2 != 0) { errc(EXIT_FAILURE, ret2, "can not join thread 2"); } printf("done\n"); return 0; } void f1(void) { size_t i; for(i=0; i<8; i++){ printf("Doing one thing\n"); usleep(3); } } void f2(void) { size_t i; for(i=0; i<4; i++){ printf("Doing another\n"); usleep(2); } }
コンパイル
cc -lpthread pthread2.c -o pthread2
実行例
% ./pthread2 execute pthread_join thread1 Doing one thing Doing another Doing one thing Doing another Doing one thing Doing another Doing one thing Doing another Doing one thing Doing one thing Doing one thing Doing one thing execute pthread_join thread2 done
関連項目
- pthreadとは
- pthread errnoとpthreadライブラリ関数の戻り値
- pthread 1つのスレッドを動かす
- pthread 2つのスレッドを動かす
- pthread mutexで排他ロックする方法
- pthreadのスレッド識別子pthread_t型
- pthread スレッドに値を渡す方法
- pthread スレッドから値を返す方法
ツイート
スポンサーリンク