信号量

✍ dations ◷ 2024-09-20 11:57:18 #电脑术语,协同控制,荷兰发明

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

相关

  • 汉越词陶文 ‧ 甲骨文 ‧ 金文 ‧ 古文 ‧ 石鼓文籀文 ‧ 鸟虫书 ‧ 篆书(大篆 ‧  小篆)隶书 ‧ 楷书 ‧ 行书 ‧ 草书漆书 ‧  书法 ‧ 飞白书笔画 ‧ 
  • 文本和数据挖掘文本挖掘有时也被称为文字探勘、文本数据挖掘等,大致相当于文字分析,一般指文本处理过程中产生高质量的信息。高质量的信息通常通过分类和预测来产生,如模式识别。文本挖掘通常
  • 中央纵裂中央纵裂(Medial longitudinal fissure,有时又称脑裂,或称脑纵裂),是大脑中线的明显沟槽,将大脑分为左右半球。中央纵裂中有大脑镰分隔,大脑镰是一层由硬膜形成的构造。纵裂中有胼
  • SLC12A3· protein binding· plasma membrane · integral component of plasma membrane · membrane · apical plasma membrane· ion transport · sodium ion transport
  • 大公大公爵是欧洲爵位的一种,来源可追溯至古罗马时期,对为罗马帝国效力,而非罗马血统的外族如日耳曼族军队的首领的称谓。在后来被引申为非王族血统,却拥有实权,对王国举足轻重的人。
  • 燃料化学工业部中华人民共和国化学工业部是中华人民共和国国务院曾经存在的部门,1956年5月成立。1970年6月煤炭工业部、石油工业部和化学工业部合并,成立燃料化学工业部。1975年2月,撤销燃料
  • 狄乐播狄乐播(Robert McCheyne Mateer,1853年2月8日-1921年9月5日),美北长老会派往中国的传教士,为被誉为“十九世纪后期最有影响的传教士教育家”的传教士狄考文(Calvin Wilson Matteer,1
  • 南方司令部美国南方司令部 (USSOUTHCOM), 驻于佛罗里达州大迈阿密多拉,是美国9大一体化作战司令部之一,责任区(英语:Area of responsibility)是加勒比海、中美洲和南美洲,也负责巴拿马运河的
  • Spirurina旋尾亚目(学名:Spirurina),原为旋尾亚纲,现时被降为小杆目之下的一个线虫的分类单元,皆为海洋生物。根据WoRMS,本亚目包括下列五个下目:
  • 秦降王后秦降王后(?-前206年1月),为中国秦朝女性,姓与名均不详,她是秦降王子婴的王后。《史记·李斯列传》记载秦王子婴同妻子儿子一通向刘邦投降,项羽进入关中后,将子婴及其夫人以及两个儿