Pthreads は、スレッドの作成と同期のための API を定義する POSIX 標準 (IEEE 1003.1c) を指します。これは実装ではなく、スレッドの動作の仕様を定義します。仕様は、オペレーティング システムの設計者が望む方法で実装できます。その結果、多くのシステムが Pthreads 仕様を実装していますが、そのほとんどは Linux、Mac OS X、Solaris などの UNIX タイプのシステムです。 Windows は Pthread をネイティブにサポートしていませんが、一部のサードパーティ Windows 実装は利用可能です。図 4.9 に示す C プログラムは、個別のスレッドで非負の整数の合計を計算するマルチスレッド プログラムを構築するための基本的な Pthreads API を示しています。 Pthreads プログラムでは、別のスレッドが指定された関数で実行を開始します。以下のプログラムでは、これはrunner()関数です。このプログラムが開始されると、main() で別の制御スレッドが開始されます。次に、main() は 2 番目のスレッドを作成し、初期化の後、runner() 関数で制御を開始します。 2 つのスレッドはグローバル データの合計を共有します。
#include<pthread.h> #include<stdio.h> int sum; /* this sum data is shared by the thread(s) */ /* threads call this function */ void *runner(void *param); int main(int argc, char *argv[]){ pthread t tid; /* the thread identifier */ /* set of thread attributes */ pthread attr t attr; if (argc != 2){ fprintf(stderr,"usage: a.out </p><p>"); return -1; } if (atoi(argv[1]) < 0){ fprintf(stderr,"%d must be >= 0</p><p>",atoi(argv[1])); return -1; } /* get the default attributes */ pthread attr init(&attr); /* create the thread */ pthread create(&tid,&attr,runner,argv[1]); /* wait for the thread to exit */ pthread join(tid,NULL); printf("sum = %d</p><p>",sum); } /* The thread will now begin control in this function */ void *runner(void *param){ int i, upper = atoi(param); sum = 0; for (i = 1; i <= upper; i++) sum += i; pthread exit(0); }
Pthreads APIを使用したマルチスレッドCプログラム。
以上がPOSIXスレッドライブラリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。