前提・実現したいこと
Cのpthreadの並列処理の以下のコードをセマフォで排他制御を行うように指示されたのですが、方法が検討ついていません。アドバイスいただけますでしょうか
該当のソースコード
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <pthread.h> 4 5int val = 0; 6int sum = 0; 7 8void do_work(int *p) 9{ 10 int i, tmp; 11 12 for (i = 0; i < 10; i++) { 13 if (val == 5) { 14 tmp = sum++; 15 printf("thread(%d): reached! sum=%d->%d\n", *p, tmp, sum); 16 val = 1; 17 } 18 else 19 val++; 20 printf("thread(%d): val=%d sum=%d\n", *p, val, sum); 21 } 22} 23 24int main() 25{ 26 pthread_t thread1, thread2; 27 int id1, id2, i; 28 29 id1 = 1, id2 = 2; 30 31 pthread_create(&thread1, 32 NULL, 33 (void *) do_work, 34 (int *) &id1); 35 36 pthread_create(&thread2, 37 NULL, 38 (void *) do_work, 39 (int *) &id2); 40 41 pthread_join(thread1, NULL); 42 pthread_join(thread2, NULL); 43 exit(0); 44}