#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
int x = 0; //在全局区域,共享
pthread_mutex_t g_mutex; //创建全局的互斥锁
pthread_cond_t cond;
void* funA(void* arg);
void* funB(void* arg);
int main(int argc, char *argv[])
{
pthread_mutex_init(&g_mutex, NULL); //对锁进行初始化
pthread_cond_init(&cond,NULL);
pthread_t pthreadA = 0;
pthread_t pthreadB = 0;
pthread_create(&pthreadA, NULL, funA, NULL); //创建两个子线程
pthread_create(&pthreadB, NULL, funB, NULL);
usleep(2000000);
printf("%s\n\n","signal");
pthread_cond_broadcast(&cond);
x=1;
pthread_join(pthreadA, NULL); //阻塞,回收资源
pthread_join(pthreadB, NULL);
pthread_mutex_destroy(&g_mutex); //释放互斥锁资源
pthread_cond_destroy(&cond);
return 0;
}
void* funA(void* arg)
{
pthread_mutex_lock(&g_mutex);
printf("%s\n\n","WaitA");
while(x==0)
{
pthread_cond_wait(&cond,&g_mutex);
}
usleep(2000000);
x--;
printf("funA:%d\n\n",x);
pthread_mutex_unlock(&g_mutex);
return NULL;
}
void* funB(void* arg)
{
pthread_mutex_lock(&g_mutex);
printf("%s\n\n","WaitB");
while(x==0)
{
pthread_cond_wait(&cond,&g_mutex);
}
usleep(2000000);
x--;
printf("funB:%d\n\n",x);
pthread_mutex_unlock(&g_mutex);
return NULL;
}
各位大*,请问这代码(IDE:codeblocks),为什么funA:-1为什么不输出?
按照我的理解,pthread_cond_wait收到信号后,两个线程都会继续往下执行,从而输出funB:0、funA:-1。