https://blog.csdn.net/senllang/article/details/130902269
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // 定义互斥锁
pthread_cond_t cond = PTHREAD_COND_INITIALIZER; // 定义条件变量
int car_wash_progress=0;
void *thread_host(void *arg)
{
printf("等待洗车店通知,我可以去打两把游戏了...\n");
pthread_mutex_lock(&mutex); // 加锁
while(car_wash_progress < 100) // 防止虚假唤醒
{
pthread_cond_wait(&cond, &mutex); // 等待条件变量
printf("车洗完了通知? \n");
}
printf("车洗完了,我要开走了..\n");
pthread_mutex_unlock(&mutex); // 解锁
return NULL;
}
void *thread_CarWash(void *arg)
{
while(car_wash_progress < 100)
{
printf("洗车店洗车中..\n");
pthread_mutex_lock(&mutex); // 加锁
car_wash_progress++;
pthread_mutex_unlock(&mutex); // 解锁
}
printf("车洗完了,通知车主..\n");
pthread_cond_signal(&cond); // 等待条件变量
return NULL;
}
int main()
{
pthread_t tid[2];
printf("主线程正在创建子线程...\n");
/* 先创建车主线程任务,避免唤醒丢失 */
pthread_create(&tid[0], NULL, thread_host, NULL); // 创建子线程
pthread_create(&tid[1], NULL, thread_CarWash, NULL); // 创建子线程
pthread_join(tid[1], NULL); // 等待子线程结束
pthread_join(tid[0], NULL);
return 0;
}
0 条评论