程序中的兩個線程交替地打印偶數和奇數直到100. 我試過這個,它工作。 是否有訪問內部主共享數據的值,並當該值達到100在C中使用2個線程使用互斥打印奇數和偶數
#include<stdio.h>
#include<pthread.h>
pthread_t tid[2];
unsigned int shared_data = 0;
pthread_mutex_t mutex;
unsigned int rc;
//prototypes for callback functions
void* PrintEvenNos(void*);
void* PrintOddNos(void*);
void main(void)
{
pthread_create(&tid[0],0,&PrintEvenNos,0)
pthread_create(&tid[1],0,&PrintOddNos,0);
sleep(3);
pthread_join(tid[0],NULL);
pthread_join(tid[1],NULL);
}
void* PrintEvenNos(void *ptr)
{
pthread_mutex_lock(&mutex);
do
{
if(shared_data%2 == 0)
{
printf("Even:%d\n",shared_data);
shared_data++;
} else {
rc=pthread_mutex_unlock(&mutex);//if number is odd, do not print, release mutex
}
} while(shared_data <= 100);
}
void* PrintOddNos(void* ptr1)
{
rc = pthread_mutex_lock(&mutex);
do
{
if(shared_data%2 != 0)
{
printf("odd:%d\n",shared_data);
shared_data++;
} else {
rc = pthread_mutex_unlock(&mutex);//if number is even, do not print, release mutex
}
} while(shared_data <= 100);
}
嘛,不是嗎?你試過了嗎? –
該程序將打印零個或兩個數字,具體取決於哪個線程先執行然後停止,因爲線程不執行一種內部循環。如果'PrintEvenNos'先運行,它將打印0,將shared_data更新爲1並終止;然後運行'PrintOddNos',打印1,將shared_data更新爲2並終止。如果'PrintOddNos'首先運行,它將打印nothings(shared_data爲0,即偶數),將shared_data更新爲1並終止;然後運行'PrintEvenNos',打印nothings(shared_data爲1,即奇數),將shared_data更新爲2並終止。 – isedev
我堅持試試它!我會盡快嘗試。我只是想了解互斥鎖是如何工作的。 – Nanobrains