メインスレッドでも使用されている別の関数を再利用するスレッド関数を定義すると、競合条件が存在する可能性がありますか?同じ関数内のローカル変数はスレッド間で共有されていますか?この場合、do_work関数はthread_oneスレッドとメインスレッドの両方で使用されます。関数do_workのローカル変数xを両方のスレッドで変更できるので、予期しない結果が生じる可能性がありますか?C - pthread関数の再利用 - ローカル変数と競合条件
void *thread_one() {
int x = 0;
int result;
while(1) {
for(x=0; x<10; x++) {
result = do_work(x);
}
printf("THREAD: result: %i\n", result);
}
}
int do_work(int x) {
x = x + 5;
return x;
}
int main(int argc, char**argv) {
pthread_t the_thread;
if((rc1 = pthread_create(&the_thread, NULL, thread_one, NULL))) {
printf("failed to create thread %i\n", rc1);
exit(1);
}
int i = 0;
int result = 0;
while(1) {
for(i=0; i<12; i+=2) {
result = do_work(i);
}
printf("MAIN: result %i\n", result);
}
return 0;
}
ただし、local * static *変数は共有されているため、安全にアクセスするには同期が必要な場合があります。 –