#include <unistd.h>
#include <pthread.h>
#include <stdio.h>
int global;
int i = 30;
int j = 30;
int k = 30;
pthread_mutex_t mutex;
void* child1(void* arg)
{
while(k--)
{
pthread_mutex_lock(&mutex);
global++;
printf("from child1\n");
printf("%d\n",global);
pthread_mutex_unlock(&mutex);
}
}
void* child2(void* arg)
{
while(j--)
{
pthread_mutex_lock(&mutex);
global++;
printf("from child1\n");
printf("%d\n",global);
pthread_mutex_unlock(&mutex);
}
}
int main()
{
pthread_t tid1, tid2;
pthread_mutex_init(&mutex, NULL);
pthread_create(&tid1, NULL, child1, NULL);
pthread_create(&tid2, NULL, child2, NULL);
while(i--)
{
pthread_mutex_lock(&mutex);
global++;
printf("from main\n");
printf("%d\n",global);
pthread_mutex_unlock(&mutex);
}
return 0;
}
我是新來的並行線程和多線程,該代碼的結果是從主要XX和child1出現很少,三個線程從未一起出現,有什麼問題呢?多線程(並行線程)競爭碼
這是不一定的情況是'printf()的'刷新輸出與換行符使用pconditional控制,和我我不知道'printf()'的底層實現是如何工作的,但是在你開始討論更棘手的問題之前,我建議增加一個'fflush(stdout)'來確保在每次迭代時爲每個線程輸出緩衝區已經在關鍵部分之間完全刷新,並且沒有機會通過一些神奇的異步事件被覆蓋。如果簡單的檢查沒有完成,那麼擔心其他問題。 – user