【发布时间】:2022-09-29 23:25:28
【问题描述】:
所以我试图理解pthread_cond_t 变量,但问题往往是有时pthread_cond_signal()/pthread_cond_broadcast() 不起作用并且睡眠线程没有被唤醒,导致我的代码出现死锁。
代码有问题吗?使用条件变量的更好/最佳方法是什么?
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <pthread.h>
#include <unistd.h>
pthread_mutex_t lock;
pthread_cond_t cv;
int count = 0;
void* routine(){
pthread_mutex_lock(&lock);
while(count!=5) pthread_cond_wait(&cv,&lock);
printf(\"count value is : %d\\n\", count);
pthread_mutex_unlock(&lock);
}
void* routine2(){
pthread_mutex_lock(&lock);
for(int i=0; i<7; i++){
count++;
printf(\"%d\\n\",count);
if(count == 5) pthread_cond_signal(&cv);
}
pthread_mutex_unlock(&lock);
}
int main(){
pthread_mutex_init(&lock,NULL);
pthread_cond_init(&cv,NULL);
pthread_t t1,t2;
pthread_create(&t1,NULL,&routine,NULL);
pthread_create(&t2,NULL,&routine2,NULL);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
pthread_mutex_destroy(&lock);
pthread_cond_destroy(&cv);
}
-
你期望这段代码做什么?它有什么作用?
-
routine2是否在count为 5 时释放互斥锁?
标签: c multithreading pthreads mutex conditional-variable