信号量
一、前言
为了方便理解和查阅本人所需的知识,在此做笔记。知识点来源书本与网络,如有侵权,联系删除。
二、概念
信号量(Semaphore)是一种实现线程间通信的机制,实现线程之间同步或临界资源的互斥访问,常用于协助一组相互竞争的线程来访问临界资源。
类似标志。
通常一个信号量的计数值用于对应有效的资源数,表示剩下的可被占用的互斥资源数。其值的含义:
0:表示没有积累下来的release释放信号量操作,且有可能有此信号量上阻塞的线程。
正值:表示有一个或多个release释放信号量操作。
使用:
用作互斥时,信号量创建后可用信号量个数满,线程在需要使用临界资源时,先获取信号量,使其变空。
用作同步时,信号量创建后被置为空,线程1取信号量而阻塞,线程2在某种条件发生后,释放信号量,于是线程1进入就绪态。
在操作系统中,使用信号量的目的是为了给临界资源建立一个标志,信号量表示该临界资源被占用情况。
使用二值信号量在线程与中断同步的例子:
串口接收中,但没有数据到来的时候,线程就进入阻塞态,不参与线程的调度;等到数据到来时,释放一个二值信号量,线程就立即从阻塞态中解除,进入就绪态,然后运行的时候处理数据。
二值信号量的运行机制
创建二值信号量,为创建的信号量对象分配内存,并把可用信号量初始化为用户自定义的个数,二值信号量的最大可用信号量个数为1。
计数型信号量的运行机制
计数信号量允许多个线程获取信号量访问共享资源,但会限制线程的最大数目。

浙公网安备 33010602011771号