描述
C语言条件锁是可以理解为信号锁,某个线程先wait,然后等待另一个线程发送信号。
注意事项
我们要特别注意,我们一定要确保在发送信号以前,wait 函数已经被执行。否则,我就会导致死锁。
解决方案
可以通过添加全局变量来判断信号是否已发送,来决定我们是否要继续条用wait 函数
代码示例
#include <stdio.h>
#include <pthread.h>
#include <stdbool.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
static bool g_signal_sent = false;
static void*
thread1_func(void* arg)
{
printf("%s %d\n", __func__, __LINE__);
pthread_detach(*((pthread_t*)arg));
pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond);
g_signal_sent = true;
pthread_mutex_unlock(&mutex);
printf("%s %d\n", __func__, __LINE__);
}
static void*
thread2_func(void* arg)
{
printf(