信号量

✍ dations ◷ 2025-10-18 00:48:29 #电脑术语,协同控制,荷兰发明

信号量(英语:semaphore)又称为信号标,是一个同步对象,用于保持在0至指定最大值之间的一个计数值。当线程完成一次对该semaphore对象的等待(wait)时,该计数值减一;当线程完成一次对semaphore对象的释放(release)时,计数值加一。当计数值为0,则线程等待该semaphore对象不再能成功直至该semaphore对象变成signaled状态。semaphore对象的计数值大于0,为signaled状态;计数值等于0,为nonsignaled状态.

semaphore对象适用于控制一个仅支持有限个用户的共享资源,是一种不需要使用忙碌等待(busy waiting)的方法。

信号量的概念是由荷兰计算机科学家艾兹赫尔·戴克斯特拉(Edsger W. Dijkstra)发明的,广泛的应用于不同的操作系统中。在系统中,给予每一个进程一个信号量,代表每个进程目前的状态,未得到控制权的进程会在特定地方被强迫停下来,等待可以继续进行的信号到来。如果信号量是一个任意的整数,通常被称为计数信号量(Counting semaphore),或一般信号量(general semaphore);如果信号量只有二进制的0或1,称为二进制信号量(binary semaphore)。在linux系统中,二进制信号量(binary semaphore)又称互斥锁(Mutex)。

计数信号量具备两种操作动作,称为V(signal())与P(wait())(即部分参考书常称的“PV操作”)。V操作会增加信号标S的数值,P操作会减少它。

运作方式:

线程使用CreateSemaphore或CreateSemaphoreEx函数创建一个semaphore对象。此时可以指定semaphore的当前计数值与计数值上限;也可指定semaphore对象的名字。其他进程中的线程可以指出已存在的semaphore对象的名字通过调用OpenSemaphore函数打开它。

如果多个线程在等待一个semaphore对象,不保证按照先进先出(FIFO)顺序调度这些等待线程。外部事件,如内核模式的异步过程调用可改变等待顺序。

在semaphore对象为signaled状态时,等待函数返回会把该semaphore对象计数值减1。函数ReleaseSemaphore把semaphore对象的计数值增加指定的值。任何线程,哪怕它没有等待完成过该semaphore对象,也可以使用ReleaseSemaphore来增加semaphore对象的计数。如果ReleaseSemaphore导致对象计数值超过上限,则该函数调用失败,返回298号错误:“Too many posts were made to a semaphore”。

一个线程多次等待同一个semaphore对象,每次等待操作完成都会降低semaphore对象计数值(直至计数值为0时该线程阻塞)。然而,通过multiple-object等待函数使用一个数组包含着同一个semaphore对象的多个句柄,不能实现对这个semaphore对象计数值的多次下降。

用完semaphore对象后,调用CloseHandle函数关闭它。semaphore对象的最后一个句柄被关闭后,操作系统会摧毁它。关闭semaphore并不影响它的计数值。因此,关闭semaphore前或者进程终止前,要确保已经正确调用过ReleaseSemaphore。否则,挂起等待该semaphore对象的线程会永久阻塞或超时返回。

相关

  • 环孢素环孢素(英语:Cyclosporine、Cyclosporine A、Ciclosporin)也称为“环孢菌素”或“环孢霉素”,是一种被广泛用于预防器官移植排斥的免疫抑制剂。它借由抑制T细胞的活性跟生长而达
  • 资讯鉴识信息鉴识(Information Forensics)是一种网络行为,利用所有已知的或未知的信息渠道来辩证一段网络信息的真伪,不论这个渠道是实体的还是虚拟的。互联网是一个自由的信息载体(Infor
  • 悬铃木参见正文悬铃木属(学名:Platanus)是悬铃木科中现存的唯一属,主要分布于欧洲东南部、印度和美洲,最常见的为二球悬铃木。本属植物都是乔木,高达30–50米,分为两族,Castaneophyllum族
  • 莱曼不连续面雷氏不连续面(Lehmann discontinuity)是指在地球的地核中地震波P波和S波突然加速的区域,该区域一般在220±30公里深处,该不连续面由丹麦女性地震学家英格·雷曼发现并以其姓氏命
  • 宪法监督委员会保守派控制:宪法监护委员会(波斯语:شورای نگهبان قانون اساسی‎)是伊朗由6名乌理玛(伊斯兰教神学者或神职人员)和6名律师组成的集行政、立法、司法职责于一
  • 自然主义文学自然主义文学作为西方文学的一个流派产生于19世纪下半叶的法国,19世纪末和20世纪初传至欧美和世界各国。自然主义文学是西方现实主义文学发展到极致蜕变的产物,也是生物学、遗
  • 长脚蜂马蜂亚科又名长脚蜂亚科(Polistinae)亦称为长脚蜂,是胡蜂的一个类群。长脚蜂属于杂食性,幼虫时以成虫猎捕回来的毛毛虫等昆虫维生,成虫后会吃树液、花粉和花蜜。长脚蜂制作蜂巢时
  • 埼玉县埼玉县(日语:埼玉県/さいたまけん Saitama ken */?)是位于日本关东地方中部的一个县,也是日本8个无海岸线的内陆县份之一,县治为埼玉市。人口约730万,为全日本第5多的都道府县。
  • 有机锂试剂有机锂试剂是含有碳原子与锂原子直接成键的一类有机金属化合物。锂原子具有天然的电正性,因此有机锂化合物的大部分电荷密度被推向了化学键上的碳原子一端,从而易形成碳负离子
  • 射束射束(英语:Beam),是一道粒子或能量的流束,较细的射束(beam)也被称为射线(ray)。