信号量

✍ dations ◷ 2025-06-04 17:23:10 #电脑术语,协同控制,荷兰发明

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

相关

  • 喷泉喷泉,又称喷水池,传统上指的从源头中向上喷出来的水流,天然的喷泉可以出现于山上或旷野上,有时候甚至会把周围的盘地填满。他们的一个共同点,是拥有足够的水压,当水流离开地面时有
  • 伴性遗传伴性遗传即遗传基因位于性染色体上的遗传现象。男性个体的X染色体一定是来源他的母亲,而他本人又一定是将其传给女儿,不会传给他的儿子;然而,女性个体的两条X染色体分别来源于她
  • 祖冲之祖冲之(429年-500年),字文远,范阳郡逎县(今河北省保定市涞水县)人,刘宋时代数学家、天文学家。祖冲之的主要成就在数学、天文历法和机械制造三个领域。祖冲之的儿子祖暅之也是数学家
  • 马加比家族马加比家族(希伯来文:מכבים‎)是犹太教世袭祭司长的家族。于公元前167年,犹太祭司玛他提亚领导犹太人对抗塞琉古王朝。玛他提亚于公元前166年卒,犹大·马加比继承父志并夺回
  • 氢化钠氢化钠,化学式为NaH,是一种无机盐。有机合成中,氢化钠主要被用作强碱。氢化钠是盐类氢化物的典型代表,即其是由Na+和H−组成的,不同于硼烷、甲烷、氨和水之类的分子型氢化物。氢
  • Oxon坐标:51°45′40″N 1°15′12″W / 51.7611°N 1.2534°W / 51.7611; -1.2534牛津大学(英语:University of Oxford;非正式:Oxford University,或:Oxford;勋衔简称:Oxon)位于英格兰东
  • 黄柏黄檗(拼音:bò,注音:ㄅㄛˋ,中古拟音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code2000","Gentium
  • 玉女添丁玉女添丁可能有以下意思︰
  • 摩拉维亚弟兄会摩拉维亚弟兄会(或译作莫拉维亚弟兄会)是一个西方基督教新教教派,14世纪末起源于波西米亚(今捷克),正式名称为弟兄合一会(Unitas Fratrum,与德克萨斯州的Unity of the Brethren不同),
  • 关天朗关天朗(1998年10月25日-),出生于中国广东广州,高尔夫球运动员。2011年第二十四届中国高尔夫球业余公开赛冠军。2012年11月在亚太业余高尔夫球锦标赛上夺冠,获得2013年度美国高尔夫