C语言条件锁使用注意事项

本文介绍了C语言条件锁的使用,强调了必须在发送信号前调用wait函数以避免死锁。提供了一个解决方案,即通过全局变量来判断是否发送信号,并给出了示例代码展示如何正确使用条件锁。
摘要由CSDN通过智能技术生成

描述

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(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值