信号量

✍ dations ◷ 2025-09-16 11:34:14 #电脑术语,协同控制,荷兰发明

信号量(英语: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对象的线程会永久阻塞或超时返回。

相关

  • 成人史迪尔氏病成人史迪尔氏病(英语:adult-onset Still's disease,缩写为 AOSD)是史迪尔氏病(英语:Systemic-onset juvenile idiopathic arthritis)的其中一种类型,是一种罕见的全身发炎(英语:System
  • 葡语系运动会葡语系运动会(葡语:Jogos da Lusofonia)是由葡语系奥林匹克委员会总会所举行以葡语为主的泛葡语地区运动会 ,参赛国家或地区是葡语系奥林匹克委员会总会之成员。参加第一届葡语
  • 内贾德马哈茂德·艾哈迈迪-内贾德(波斯语:محمود احمدی‌نژاد‎,转写:Mahmūd Ahmadinezhād,发音:  ( 发音),1956年10月28日-)是伊朗第6任总统,同时是伊朗保守派政治联盟伊斯
  • 柏林博物馆柏林博物馆可以指:
  • 小菜蛾小菜蛾(学名:Plutella xylostella),也称菜蛾、两头尖、方块虫、小青虫,是一种可能原生于地中海地区的蛾,现广泛分布于世界各地。小菜蛾的生命周期很短(25°C时只有14天),但是生命力极
  • 台翔航太工业台翔航太工业股份有限公司是中华民国一间官民合资公司,1991年9月由行政院开发基金出资29%、民间企业出资71%成立。原有台中厂房负责经国号战机零件,2001年因战机减产而变成纯
  • 宜章县宜章县位于中国湖南省南部,为郴州市辖县。地处南岭山脉中段,骑田岭南麓。县域总面积2,142.7平方公里,位居全省各县市的第42位;全县常住人口579,565人(2010普查),居全省第43位。2011
  • 词 (语言)在语言学中,词(英语:word),又称为单词,是能独立运用并含有语义内容或语用内容(即具有表面含义或实际含义)的最小单位。词的集合称为词汇,例如:所有中文词统称为“中文词汇”等。词典是
  • 氯金酸氯金酸也称为四氯合金酸,是分子式为H的无机化合物。制备氯金酸时,可将金溶在王水中,再将溶液蒸发即可。加热时,氯金酸会分解为氯化氢及三氯化金,此反应是可逆反应,因此将三氯化金
  • 勇敢梦《勇敢梦》(Dreaming Out Loud),是美国摇滚乐队一体共和的首张录音室专辑。制作人为格雷格·韦尔斯(英语:Greg Wells),其中两首歌由瑞安·特德 制作,混音工程师为乔·祖克。专辑发