第1关:信号量
目录
此项目来源educoder实践教学平台
任务描述
在上一个实训中,我们学习了使用互斥锁来实现线程的同步,Linux系统中还提供了另一个类似互斥锁的线程不同操作,那就是信号量。
本关任务:学会使用信号量
来实现线程间的同步与互斥。
相关知识
互斥锁变量(Mutex
)是非0
即1
的,可看作一种资源的可用数量。当初始化Mutex
为1
时,则表示当前资源可用,可以通过加锁操作来获取该资源,当加锁成功后,将Mutex
减到0
。当Mutex
为0
时,则表示当前资源不可用,只有对该资源进行减锁操作后,该资源才可用,当减锁成功后,将Mutex
重新加到1
。
Linux系统中提供与互斥锁相似功能的操作,它就是信号量。它们都可以用来表示资源的可用数量,与互斥锁不同之处是,信号量可以表示资源的可用数量大于1
,而互斥锁只能是1
。
信号量广泛用于线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。当信号量值大于0
时,则可以访问,否则将阻塞。PV
原语是对信号量的操作,一次P
操作使信号量减1
,一次V
操作使信号量加1
。
信号量用于多线程同步的步骤如下所示:
[信号量同步多线程]
以上操作可以保证,线程1
和线程2
的执行顺序为:线程1
&g