信号量

✍ dations ◷ 2025-06-29 03:01:09 #电脑术语,协同控制,荷兰发明

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

相关

  • 心血管检查心血管检查是有关心血管的身体检查,可能包括心前区检查(英语:precordial examination)及周边血管检查(英语:peripheral vascular examination)。有些部分的检查可能在坐姿比较容易
  • 克里米亚-刚果出血热克里米雅–刚果出血热(Crimean–Congo hemorrhagic fever,简称CCHF)是一种病毒导致的传染性疾病。症状包括发热、肌肉痛、头痛、呕吐、腹泻和皮肤瘀点,通常于暴露病原后2周内发
  • 肌肉组织肌肉组织(Muscle tissue)是组成动物身体肌肉的软组织,肌肉的收缩是透过肌肉组织进行的。这和肌肉中其他的组织(例如腱或肌束膜)相反。肌肉组织是在胚胎发育时借由肌发生(英语:myoge
  • 阿尔琴阿尔琴(英语:Alcuin,约735年-804年5月19日)一作阿尔昆,是中世纪一位英格兰学者。生于英格兰诺森布里亚王国的约克。约782年应查理曼的邀请,赴加洛林王朝担任宫廷教师。对卡洛林文艺
  • 化学药物治疗人体解剖学 - 人体生理学 组织学 - 胚胎学 人体寄生虫学 - 免疫学 病理学 - 病理生理学 细胞学 - 营养学 流行病学 - 药理学 - 毒理学化学疗法(英语:Chemotherapy),简称化疗(Che
  • 苏-35苏35战斗机(Сухой Су-35,北约代号:Flanker-E)是四代半重型战斗机,具有远程、多用途、空优、打击等特性。和Su-27有同样血统设计,有相似性能特征和零件。实验机T10-24于1985
  • 十三酸在化学中,十三酸(Tridecylic acid)是一种有机化合物,是一个拥有13个碳原子的长链饱和脂肪酸,其分子式为CH3(CH2)11COOH。在乳制品中十分常见。不饱和脂肪酸
  • 有机铊化学有机铊化学是研究含碳-铊键化合物的化学分支。由于它在自然界含量稀少、分布分散且毒性特别大,故没有同族的硼和铝研究的广泛而深入。在有铊化合物中,铊可以以+1或+3氧化态的
  • 前28年屋大维获得首席元老职位。
  • 万州高级中学万州高级中学,即重庆市万州高级中学,创办于1959年,原名万县沙河中学、四川省万县中学、重庆市万州中学。系原四川省和重庆市首批重点中学。