C 3ステップでマルチスレッドを実現
4197 ワード
Cマルチスレッドを使った良い文を見て、getという新しいスキルを見つけて、ついでに私が学んだポイントを書いて、みんなで共有しました.英文原文リンク:pthreads-in-c-a-minimal-working-example
Cでマルチスレッドを実現するには、最も簡単な方法はPthreadsを使用し、それを使用するとスレッド間でメモリとコードが共有されます.一方、呼び出された関数については、同時に複数回呼び出すことに相当します(関数内で定義された変数は共有されません).次に、クイックスタートを開始します.
ステップ1:宣言と定義まずファイルヘッダにPthreadsライブラリを含む: これらのスレッドを指す変数を定義します.変数タイプはpthread_です.t,配列またはポインタ(ポインタでメモリを割り当てることを覚えている)を使用できる複数の を定義すると.スレッドを使用する関数を定義します.この関数のパラメータは(void*)タイプのパラメータを返し、(void*)タイプの変数があります.ここでは、この関数をvoid*my_と仮定します.entry_function(void *param);
ステップ2:スレッドの作成とマージ定義が完了すると、スレッドはpthread_を使用します.create関数を作成し、指定した関数に入ります.この関数には4つのパラメータがあり、1つ目は作成するスレッド変数の参照で、2つ目は属性(通常NULLを使用します)、3つ目はスレッドが実行する関数で、上記で定義したもので、4つ目は入力されたパラメータです.私たちが呼び出したコード長は です.スレッドが指定した関数を実行した後、彼らの戻り値をマージする必要があります.このときjoin_を呼び出します.thread関数.この関数の最初のパラメータはスレッド変数として定義され、2番目のパラメータは戻り値を指すポインタ(なければNULL) です.
第3部:パラメータ付きのコンパイルの最後のステップは、コンパイル時にパラメータ-lpthreadを追加する必要があります.
サンプルコードは次のとおりです.出力を推測できます.
output: x: 0, y:0 y increment finished x increment finished x: 100, y: 100
Cでマルチスレッドを実現するには、最も簡単な方法はPthreadsを使用し、それを使用するとスレッド間でメモリとコードが共有されます.一方、呼び出された関数については、同時に複数回呼び出すことに相当します(関数内で定義された変数は共有されません).次に、クイックスタートを開始します.
ステップ1:宣言と定義
#include
pthread_t thread0
ステップ2:スレッドの作成とマージ
pthread_create(&thread0, NULL, my_entry_function, ¶meter)
pthread_join(thread0, NULL);
第3部:パラメータ付きのコンパイルの最後のステップは、コンパイル時にパラメータ-lpthreadを追加する必要があります.
gcc program.c -o program -lpthread
サンプルコードは次のとおりです.出力を推測できます.
#include
#include
/* this function is run by the second thread */
void *inc_x(void *x_void_ptr)
{
/* increment x to 100 */
int *x_ptr = (int *)x_void_ptr;
while(++(*x_ptr) < 100);
printf("x increment finished
");
/* the function must return something - NULL will do */
return NULL;
}
int main()
{
int x = 0, y = 0;
/* show the initial values of x and y */
printf("x: %d, y: %d
", x, y);
/* this variable is our reference to the second thread */
pthread_t inc_x_thread;
/* create a second thread which executes inc_x(&x) */
if(pthread_create(&inc_x_thread, NULL, inc_x, &x)) {
fprintf(stderr, "Error creating thread
");
return 1;
}
/* increment y to 100 in the first thread */
while(++y < 100);
printf("y increment finished
");
/* wait for the second thread to finish */
if(pthread_join(inc_x_thread, NULL)) {
fprintf(stderr, "Error joining thread
");
return 2;
}
/* show the results - x is now 100 thanks to the second thread */
printf("x: %d, y: %d
", x, y);
return 0;
}
output: x: 0, y:0 y increment finished x increment finished x: 100, y: 100