以下のコードでは、スレッドを使用して x1 と x2 の値を順番に計算しようとしています。プロセッサにとってコストがかかります。問題は、両方のスレッドを並行して実行したいのですが、両方のスレッドのループを均等にシリアル化する必要があります (つまり、1 回の呼び出しで 1 回実行する必要があります)。したがって、これらの while ループを削除して結果をシリアルに取得する方法はありますか。x1 と x2 は互いに独立しているため、セマフォとミューテックスの使用について非常に混乱していますか? 助けてください。前もって感謝します。
#include <stdio.h>
#include <pthread.h>
pthread_t pth1,pth2;
//Values to calculate
int x1 = 0, x2 = 0;
//Values for condition
int cond1 = 0,cond2 = 0;
void *threadfunc1(void *parm)
{
for (;;) {
// Is this while loop is very costly for the processor?
while(!cond1) {}
x1++;
cond1 = 0;
}
return NULL ;
}
void *threadfunc2(void *parm)
{
for (;;) {
// Is this while loop is very costly for the processor?
while(!cond2) {}
x2++;
cond2 = 0;
}
return NULL ;
}
int main () {
pthread_create(&pth1, NULL, threadfunc1, "foo");
pthread_create(&pth2, NULL, threadfunc2, "foo");
int loop = 0;
while (loop < 10) {
// iterated as a step
loop++;
printf("Initial : x1 = %d, x2 = %d\n", x1, x2);
cond1 = 1;
cond2 = 1;
// Is this while loop is very costly for the processor?
while(cond1) {}
while(cond2) {}
printf("Final : x1 = %d, x2 = %d\n", x1, x2);
}
pthread_cancel(pth1);
pthread_cancel(pth2);
return 1;
}