信号量

一、前言

为了方便理解和查阅本人所需的知识,在此做笔记。知识点来源书本与网络,如有侵权,联系删除。

二、概念

信号量(Semaphore)是一种实现线程间通信的机制,实现线程之间同步或临界资源的互斥访问,常用于协助一组相互竞争的线程来访问临界资源。
类似标志。
通常一个信号量的计数值用于对应有效的资源数,表示剩下的可被占用的互斥资源数。其值的含义:
0:表示没有积累下来的release释放信号量操作,且有可能有此信号量上阻塞的线程。
正值:表示有一个或多个release释放信号量操作。

使用:

用作互斥时,信号量创建后可用信号量个数满,线程在需要使用临界资源时,先获取信号量,使其变空。
用作同步时,信号量创建后被置为空,线程1取信号量而阻塞,线程2在某种条件发生后,释放信号量,于是线程1进入就绪态。

在操作系统中,使用信号量的目的是为了给临界资源建立一个标志,信号量表示该临界资源被占用情况。

使用二值信号量在线程与中断同步的例子:

串口接收中,但没有数据到来的时候,线程就进入阻塞态,不参与线程的调度;等到数据到来时,释放一个二值信号量,线程就立即从阻塞态中解除,进入就绪态,然后运行的时候处理数据。

二值信号量的运行机制

创建二值信号量,为创建的信号量对象分配内存,并把可用信号量初始化为用户自定义的个数,二值信号量的最大可用信号量个数为1。

计数型信号量的运行机制

计数信号量允许多个线程获取信号量访问共享资源,但会限制线程的最大数目。

posted @ 2023-02-09 11:25  「后进生」  阅读(231)  评论(0)    收藏  举报