信号量

简介: 信号量

信号量是一种在多线程/进程编程中用于同步和互斥的机制,是一个与队列有关的整型变量,你可以把它想象成一个数后面拖着一条排队的队列,如图:


image.png


那信号量上面值n

n>0:当前有可用资源,可用资源数量为n


n=0:资源都被占用,可用资源数量为0


n<0:资源都被占用,并且还有n个进程正在排队


信号量拖着的那个队列就是用来放正在排队想要使用这一资源的进程



在C语言中,可以使用信号量来控制对共享资源的访问,以避免数据竞争和冲突。C语言中的信号量通常使用sem_t类型来表示,并通过一些相关的函数来进行初始化、操作和销毁。


1. sem_init:用于初始化信号量。它接受一个指向sem_t变量的指针、一个整数值(表示初始信号量的计数器)以及一个标志(通常为0)作为参数。


2. sem_wait:用于尝试获取信号量。如果信号量计数器大于0,则会将计数器减1,并立即返回。如果计数器为0,则会阻塞当前线程/进程,直到信号量计数器大于0。


3. sem_post:用于释放信号量。它将信号量计数器加1,并唤醒可能正在等待该信号量的其他线程/进程。


4. sem_destroy:用于销毁信号量。它释放与信号量相关的资源。

相关文章
|
7月前
|
程序员
信号量和管程
信号量和管程
39 0
|
安全
理解信号量
理解信号量
|
7月前
多线程并发之Semaphore(信号量)使用详解
多线程并发之Semaphore(信号量)使用详解
2543 0
|
算法
信号量(上)
信号量(上)
39 0
|
存储
信号量(下)
信号量(下)
44 0
|
Linux 调度
信号量
信号量
83 0
|
存储 网络协议 API
4-FreeRTOS队列、互斥、信号量
4-FreeRTOS队列、互斥、信号量
信号量的使用
信号量的使用
203 0
Semaphore信号量
Semaphore 可以用来限制或管理数量有限资源的使用情况 - 信号量的作用是用来维护一个“许可证”,的计数,线程可以获取 许可证,那信号量剩余许可证就减一,线程也可以是否一个许可证,那剩余的许可证就加一,当信号量拥有的许可证为0时,那么下一个线程想获得许可证,就要进行等待,直到另外线程释放许可证
284 0
Semaphore信号量
信号量Semaphore的使用
允许多个线程同时访问:信号量(Semaphore) 信号量为多线程协作提供了更为强大的控制方法。广义上说,信号量是对锁的扩展。无论是内部锁synchronized还是重入锁ReentrantLock,一次都只允许一个线程访问一个资源,而信号量指定多个线程访问同一个资源。
1338 0