信号量

✍ dations ◷ 2025-08-22 06:46: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对象的线程会永久阻塞或超时返回。

相关

  • 爱德华·泰勒爱德华·泰勒(英语:Edward Teller,原匈牙利名为Teller Ede,1908年1月15日-2003年9月9日),出生于匈牙利的犹太裔理论物理学家,被誉为“氢弹之父”(见泰勒-乌拉姆构型),但他本人并不喜欢
  • 卡氏间质细胞卡氏间质细胞(interstitial cell of Cajal、ICC,卡哈尔细胞)是在胃肠道中发现的一种间质细胞。有不同类型且具有不同的功能。其中“肌间质细胞”(Myenteric Interstitial cells
  • 冰激凌头痛冰激凌头痛(英语:ice-cream headache)又称大脑冻结(英语:brain freeze)、冷刺激头痛(英语:cold-stimulus headache),其学名为翼腭神经节疼痛(sphenopalatine ganglioneuralgia),是一种通
  • 古王国古王国(前2686年—前2181年)是古埃及历史的一个时期,对应于从埃及第三王朝至第六王朝的四个王朝。这一时期也被称作“金字塔时期”,因为其中的第四王朝以曾修建为数众多的金字塔
  • 肌肉崇拜肌肉崇拜是一种身体崇拜(Body worship)的形式,其崇拜者以各种包含磨蹭、按摩、亲吻与舔舐等性刺激方式接触所谓的主导者的肌肉。主导者几乎总是一名健美运动者,要么是一名健美身
  • Q开关Q开关(英文:Q-switching),也称巨脉冲发生器,是一种产生脉冲激光的技术。与同样用来产生脉冲的锁模方式相比,Q开关方式的重复率,脉冲能量,脉冲持续时间更长。 有时,这两种技术也会同时
  • 东瓯国东瓯(前472年-前138年),又称东越、东海,是古代百越部落建立的一个国家,其国土大致在今日浙江省东南的温州至台州中南部一带。东瓯相传是古代越王后裔的封地,越国灭亡之后割据自立。
  • 并购并购,意即合并与收购(Mergers and acquisitions,缩写 M&A),是策略管理、企业财务及管理的术语,指不使用创建子公司或者合资公司的方式,通过购买、售卖、拆分以及合并不同公司或者类
  • 环丁四酮环丁四酮,也称作四氧代环丁烷,是一种假想的有机化合物,化学式为C4O4或(-(C=O)-)4。 它是一种碳的氧化物,实际上一氧化碳的四聚体。这种化合物似乎在热力学上不稳定。直到2000年,
  • 侵略 (社会科学)在心理学、其他社会学或行为科学领域,侵略是一种造成伤害或痛苦的行为,包括物质和非物质二方面。作为行为,即使没有造成实际的伤害或痛苦可能是侵略;意外造成伤害或者痛苦不是侵