Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

POSIXスレッドライブラリ


Pthreadsは、スレッドの作成と同期のためのAPIを定義するPOSIX標準(IEEE 1003.1c)を指します。これは、実装ではなく、スレッドの動作の仕様を定義します。この仕様は、OS設計者が希望する方法で実装できます。非常に多くのシステムがPthreads仕様を実装しています。ほとんどは、Linux、Mac OS X、SolarisなどのUNIXタイプのシステムです。 WindowsはネイティブでPthreadをサポートしていませんが、Windows用のサードパーティの実装がいくつか利用可能です。図4.9に示すCプログラムは、別のスレッドで非負の整数の合計を計算するマルチスレッドプログラムを構築するための基本的なPthreadsAPIを示しています。個別のスレッドは、Pthreadsプログラムの指定された関数で実行を開始します。以下のプログラムでは、これはrunner()関数です。このプログラムの開始時に、制御の単一スレッドがmain()で開始されます。次に、main()は、初期化後に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 \n");
      return -1;
   }
   if (atoi(argv[1]) < 0){
      fprintf(stderr,"%d must be >= 0\n",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\n",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);
}

PthreadsAPIを使用したマルチスレッドCプログラム。


  1. スレッドを強制終了するC#プログラム

    最初にスレッドを作成して開始します- // new thread Thread thread = new Thread(c.display); thread.Start(); 次に、スレッドを表示し、停止機能を設定してスレッドの動作を停止します- public void display() {    while (!flag) {       Console.WriteLine("It's Working");       Thread.Sleep(2000);   &nbs

  2. Javaのスレッドプール

    スレッドプールは、事前に初期化されたスレッドのコレクションです。スレッドプールの背後にある一般的な計画は、メソッドの起動時にさまざまなスレッドを形成し、それらが座って作業を期待する場所に配置することです。サーバーは参加の呼び出しを受信すると、このプールからスレッドを起動し(使用可能な場合)、サービスの要求を渡します。スレッドがサービスを完了すると、プールに戻り、多くの作業を待ちます。プールにアクセス可能なスレッドが含まれていない場合、サーバーはスレッドが解放されるまで待機します。 新しいスレッドを作成する必要がないため、時間を節約できます。 サーブレットとJSPで、リクエストをメソッド化す