pthread_cond_signal唤醒问题

#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include<signal.h>
#include<sys/types.h>
#include<pthread.h>
#include<stdlib.h>

pthread_mutex_t mutex;
pthread_cond_t cond;

void* func1(void* arg)
{
	pthread_mutex_lock(&mutex);
	printf("func1\n");
	pthread_mutex_unlock(&mutex);

}

void* func2(void* arg)
{
	sleep(1);
	printf("func2\n");
	pthread_cond_signal(&cond);
}


int main()
{

	pthread_mutex_init(&mutex,NULL);
	pthread_cond_init(&cond,NULL);
	pthread_mutex_lock(&mutex);
	pthread_t pd1,pd2;

	pthread_create(&pd1,NULL,func1,NULL);
	pthread_create(&pd2,NULL,func2,NULL);

	printf("main1\n");
	pthread_cond_wait(&cond,&mutex);
	printf("main2\n");

	pthread_join(pd1,NULL);
	pthread_join(pd2,NULL);
	pthread_mutex_destroy(&mutex);
	pthread_cond_destroy(&cond);

	return 0;
}

在这里插入图片描述

pthread_cond_signal唤醒的不仅仅是pthrad_cond_wait阻塞的线程,同样也会唤醒阻塞在pthread_mutex_lock的线程


版权声明:本文为qq_40794602原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。