C言語でどのようにしてグローバルスレッドに値を渡すか
C言語では、グローバル変数を使用してスレッドに値を渡すことができます。以下に例を示します:
#include <stdio.h>
#include <pthread.h>
int global_value = 0;
void* thread_function(void* arg) {
int local_value = *(int*)arg;
printf("Local value in thread: %d\n", local_value);
global_value = local_value; // 将局部变量的值赋给全局变量
pthread_exit(NULL);
}
int main() {
pthread_t thread;
int local_value = 10;
printf("Local value in main: %d\n", local_value);
pthread_create(&thread, NULL, thread_function, &local_value);
pthread_join(thread, NULL);
printf("Global value after thread execution: %d\n", global_value);
return 0;
}
上の例では、スレッドに値を渡すためのグローバル変数global_valueを定義しています。main関数では、ローカル変数local_valueを宣言して、スレッド関数thread_functionにそのアドレスを渡しています。
スレッド関数は、arg引数を整数ポインタ型にキャストしてローカル変数のlocal_valueに代入する。その後、global_valueにこの値を代入します。
メイン関数ではスレッドを作成し、実行が完了するまで待ちます。最後に、グローバル変数グローバル_バリューの値を出力し、値の受け渡しが成功したかどうかを確認します。
マルチスレッド環境でグローバル変数にアクセス・変更する場合、競合条件を避けるために、ミューテックスなどの適切な同期機構を使用することが重要です。