C言語でマルチスレッドライブラリを呼び出すには

C言語ではpthreadライブラリを用いてマルチスレッドプログラミングが可能です。以下に簡単なマルチスレッドプログラムのサンプルを示します。

#include <stdio.h>
#include <pthread.h>
#define NUM_THREADS 5
// 线程函数
void* threadFunction(void* threadId) {
long tid = (long)threadId;
printf("Hello from thread %ld\n", tid);
pthread_exit(NULL);
}
int main() {
pthread_t threads[NUM_THREADS];
int rc;
long t;
// 创建多个线程
for (t = 0; t < NUM_THREADS; t++) {
printf("Creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, threadFunction, (void*)t);
if (rc) {
printf("ERROR: return code from pthread_create() is %d\n", rc);
return 1;
}
}
// 等待所有线程结束
for (t = 0; t < NUM_THREADS; t++) {
rc = pthread_join(threads[t], NULL);
if (rc) {
printf("ERROR: return code from pthread_join() is %d\n", rc);
return 1;
}
}
printf("All threads have completed successfully.\n");
return 0;
}

上で挙げたコードでは、pthread.hのヘッダーファイルをインクルードし、main関数内でスレッドを作成します。pthread_create関数は、スレッドを作成するために利用され、4つの引数を受け取ります。スレッドIDへのポインタ、スレッド属性(通常はNULL)、スレッド関数へのポインタ、およびスレッド関数に渡される引数です。

pthread_join関数を使用してスレッドの終了を待ちます。pthread_join関数は、指定されたスレッドが終了するまで呼び出しスレッドをサスペンドするために使用されます。2つのパラメーターを受け取ります。1つは待機するスレッドID、もう1つはスレッドの戻り値を指すポインターです(この例ではNULLを使用します)。

マルチスレッドプログラミングを行う際は、競合条件やデータアクセス競合を回避するために、スレッド間の同期および排他制御に注意する必要があります。

bannerAds