linux sem 多进程sem_open sem_init,linux 线程同步(二)

本文介绍了Linux系统中信号量的概念,作为互斥锁的升级版,信号量允许多个进程共享资源。文章详细阐述了信号量的初始化、等待和发布操作,并提供了一个生产者-消费者问题的示例。接着,讨论了条件变量,一种用于线程同步的机制,强调其必须与互斥锁结合使用。文中还提供了条件变量的初始化、等待、唤醒和广播操作的示例。
摘要由CSDN通过智能技术生成

信号量

信号量是相互排斥锁的升级版把相互排斥锁中1变成了n。举个简单的样例:如果如今有10个人,有一部手机。这10个人都竞争来使用手机打电话这就是相互排斥锁。对于信号量,如今可能是有4部手机,这10个人都竞争来使用手机打电话。相比相互排斥锁信号量由1变成了4。信号量相也就是操作系统中pv操作,它广泛应用进程或者线程间的同步与相互排斥。

相关库函数介绍

#include //所需头文件

//初始化信号量sem初始化的时候能够指定信号量的初始值,以及能否够在多进程间共享value表示要信号量初始值,pshared表示是否再多进程之前共享。

0表示不在多进程间

共享,非0表示在多进程之间共享详细能够man sem_init

//成功返回0,出错返回-1

int sem_init(sem_t *sem, int pshared, unsigned int value);

int sem_wait(sem_t *sem)//相当于p操作

int sem_try_wait(sem_t *sem)//相当于p操作。在信号量值大于0时都能将信号量的值减一,与上面sem_wait的差别是,在信号值小于0时

int sem_post(sem_t *sem)//相当于v操作

int sem_getvalue(sem_t *sem)//用于得到信号量的值

int sem_destory(sem_t *sem) //释放信号量

信号量实例:生产者消费值

#include

#include

#include

#include

#define BUFSIZE 10

int buf[BUFSIZE];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值