信号变量/信号量

本文介绍了信号变量与信号量在多线程编程中的应用。信号变量通常与互斥锁配合,用于线程间的同步和条件等待。而信号量则是一种更强大的同步机制,可以理解为加强版的互斥锁。文中详细阐述了条件变量的初始化、等待、唤醒操作以及信号量的初始化、加减、尝试加锁和销毁等函数的使用。
摘要由CSDN通过智能技术生成

信号变量

条件本身不是锁!但它也可以造成线程阻塞。通常与互斥锁配合使用。给多线程提供一个会合的场所。

使用互斥量保护共享数据
使用条件变量可以使线程阻塞, 等待某个条件的发生, 当条件满足的时候解除阻塞

条件变量的两个动作:

条件不满足,线程阻塞
条件满足,通知阻塞的线程解除阻塞, 开始工作。

条件变量相关函数

pthread_cond_t cond;
定义一个条件变量

int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);
函数描述:
    初始化条件变量
函数参数
    cond:条件变量
    attr:条件变量属性, 通常传NULL
函数返回值:成功返回0,错误返回错误号

int pthread_cond_destroy(pthread_cond_t *cond);
    销毁条件变量

int pthread_cond_wait(pthread_cond_t *restrict cond,
pthread_mutex_t *restrict mutex);
函数描述:
    条件不满足,引起线程阻塞并解锁
    条件满足,解除线程阻塞,并加锁
函数参数:
     cond: 条件变量
    mutex: 互斥锁变量
函数返回值:成功返回0,错误返回错误号

int pthread_cond_signal(pthread_cond_t *cond);
函数描述:
    唤醒至少一个阻塞在该条件变量上的线程
函数参数:
    条件变量–>cond
函数返回值: 成功返回0, 失败返回错误号

//使用条件变量实现生产者和消费者模型
/*
用链表模仿生产者和消费者
生产者:向链表中插入节点
消费者:从链表中读取节点,同时将该节点销毁
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/typ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值