我知道这个问题听起来很熟悉,甚至可能是个愚蠢的问题,但我没能找到解决办法.
所以我的问题基本上是,当一个parent_thread
调用pthread_mutex_lock(&mutex)
,然后调用pthread_cond_wait(&condition, &mutex)
释放互斥锁,然后child_thread
调用pthread_mutex_lock(&mutex)
,然后是pthread_cond_signal(&condition)
,然后是pthread_mutex_unlock(&mutex)
时会发生什么.这意味着互斥锁被解锁,现在如果parent_thread
次try 调用pthread_mutex_unlock(&mutex)
,应该会导致未定义的行为,对吗?
示例代码:
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t c = PTHREAD_COND_INITIALIZER;
void thr_exit() {
pthread_mutex_lock(&m);
done = 1;
pthread_cond_signal(&c);
pthread_mutex_unlock(&m);
}
void *child(void *arg) {
printf("child\n");
thr_exit();
return NULL;
}
void thr_join() {
pthread_mutex_lock(&m);
while (done == 0)
pthread_cond_wait(&c, &m);
pthread_mutex_unlock(&m);
}
int main(int argc, char *argv[]) {
printf("parent: begin\n");
pthread_t p;
pthread_create(&p, NULL, child, NULL);
thr_join();
printf("parent: end\n"); return 0;
}