信号量

✍ dations ◷ 2024-12-23 00:19:51 #电脑术语,协同控制,荷兰发明

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

相关

  • 降解分解反应(decomposition reaction)是化学反应的常见类型之一,是指化合物在特定条件下分解成二种或二种以上元素或化合物的反应。例如:水在通电的情况下会分解成氢气和氧气;氯酸钾
  • 大豆油大豆油(英语:Soybean oil)又称豆油、常见者多为大豆色拉油 ,是从大豆中提取的植物油脂,日常食用油。常用的提取的方法有两种:压榨法和浸提法,有时二者兼用。大豆提取豆油之后的下脚
  • 车臣人100车臣人(车臣语:Нохчий)是北高加索地区众多民族中人口最多的民族。在现代,所谓的车臣人有多种划分方法:比如,按照所生活的地域,可分为山地车臣人和平原车臣人或者用组成车
  • 希拉里·科普罗夫斯基希拉里·科普罗夫斯基(波兰语:Hilary Koprowski,1916年12月5日-2013年4月11日),波兰裔犹太人,美国病毒学家,研发脊髓灰质炎疫苗的先驱科学家。希拉里·科普罗夫斯基1916年出生于波兰
  • 西方净土极乐世界(梵语:सुखावती,转写:Sukhāvatī),音译为须摩提,又称西方极乐世界、安乐世界、善解世界、清泰世界、西方净土、阿弥陀佛净土,是佛教中阿弥陀佛成佛时,依因地修行所发
  • 安吉丽娜安吉丽娜国家森林(英语:Angelina National Forest)是美国的一处国家森林,位处得克萨斯州东部圣奥古斯丁县、安杰利纳县、杰斯帕县与纳科多奇斯县,占地面积约153.18 × 103英亩(61
  • 白细胞介素2n/an/an/an/an/an/an/an/an/an/a白细胞介素2 (英语:Interleukin 2,IL-2)是细胞因子中白细胞介素的一种,在免疫系统中起重要作用。它是一种蛋白质,负责调节白细胞(白细胞,通常是淋
  • 母岛母岛(日语:母島/ははじま Haha-jima),是日本东京都所属小笠原群岛中的一个岛屿,在小笠原群岛中面积为第二大。该岛面积20.21km²,人口450人(2009年)。该岛位于父岛以南50公里。母岛
  • 德清窑德清窑,东晋至南朝中国南方自成系统的民窑。该窑不见于记载,其来源可以上溯至东汉,成熟的烧制技术则始于东晋,在南朝衰落,仅有百余年的生产历史。此后在周边地区虽有延续,但品质每
  • 心包积血心包积血是指心脏旁心包膜腔中积有血液 ,在临床上类似心包积液,视其体积大小与恶化速度,可能引起心包填塞 。 心包积血的常见症状包括呼吸困难,异常快速呼吸和疲倦,但这每个征象