【发布时间】:2020-06-15 16:00:18
【问题描述】:
所以我正在制作一个带有 1 个主线程(我的主线程)的程序,它创建了第二个主线程。第二个应该等待信号然后运行。 Main 等待加入。
我在理解我的主线程如何锁定互斥锁时遇到问题,然后我的线程也会锁定它并等待信号。我的意思是这是每个人都给出的“指导方针”,但我不明白它是如何工作的。由于 main 锁定了互斥锁,那么线程将始终处于锁定的静音状态并等待互斥锁被解锁,不是吗?这样,信号将在线程获得互斥体并在等待中阻塞之前发送(因此它永远不会被唤醒)。但话又说回来,需要锁定互斥锁才能等待变量......请帮助。 这是代码,它创建了一个循环,因为线程函数在等待中阻塞..
static pthread_mutex_t mtx;
pthread_cond_t cond;
void *threadfunction(void* arg){
pthread_mutex_lock(&mtx);
pthread_cond_wait(&cond,&mtx);
pthread_mutex_unlock(&mtx);
}
int main(void){
pthread_mutex_init(&mtx,NULL);
pthread_cond_init(&cond,NULL);
pthread_t tthread;
pthread_mutex_lock(&mtx);
pthread_create(&tthread,NULL,threadfunction,NULL);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mtx);
pthread_join(tthread,NULL);
}
【问题讨论】:
标签: multithreading mutex condition-variable