自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

信號(hào)量對(duì)象沒(méi)有所有者,你明白了嗎?

開(kāi)發(fā) 前端
既然提到了所謂的高性能版本,我想原作者所表達(dá)的意思是:對(duì)于爾等 C++ 工人來(lái)說(shuō),平常使用無(wú)妨,但是如果是性能攸關(guān)的代碼,頻繁地切換內(nèi)核上下文所帶來(lái)的性能開(kāi)銷(xiāo),不可小視。

相較于互斥對(duì)象(Mutex)和臨界區(qū)對(duì)象(Critical Section) ,信號(hào)量沒(méi)有所有者,它們只有計(jì)數(shù)。

ReleaseSemaphore 函數(shù)將會(huì)以指定的數(shù)量增加對(duì)應(yīng)信號(hào)量對(duì)象的計(jì)數(shù)。 (增加計(jì)數(shù)這個(gè)動(dòng)作,可能會(huì)釋放正在等待的線程)但是釋放信號(hào)量的線程不必與最初聲明它的線程相同。這與互斥對(duì)象和臨界區(qū)對(duì)象不同,后者要求聲明線程也是釋放線程。

有些人以類(lèi)似互斥對(duì)象的方式使用信號(hào)量: 他們創(chuàng)建一個(gè)初始計(jì)數(shù)為 1 的信號(hào)量,并像這樣使用它,如下面代碼所示:

WaitForSingleObject(hSemaphore, INFINITE);
… do stuff ..
ReleaseSemaphore(hSemaphore, 1, NULL);

如果線程在設(shè)法釋放信號(hào)量之前退出(或崩潰),則信號(hào)量計(jì)數(shù)器不會(huì)自動(dòng)還原。相較于互斥對(duì)象,如果所有者線程在持有互斥對(duì)象時(shí)終止,則釋放互斥對(duì)象。因此,對(duì)于這種使用模式,使用互斥對(duì)象更加合適一些。

如果資源的概念所有權(quán)可以跨線程,則信號(hào)量非常有用。我們來(lái)看下圖:

此技巧不適用于互斥對(duì)象或臨界區(qū)對(duì)象,因?yàn)榛コ鈱?duì)象和臨界區(qū)對(duì)象具有所有者,并且只有所有者才能釋放互斥對(duì)象或臨界區(qū)對(duì)象。

請(qǐng)注意,如果 KeepWorking 函數(shù)退出并忘記釋放信號(hào)量,則計(jì)數(shù)器不會(huì)自動(dòng)恢復(fù)。操作系統(tǒng)不知道信號(hào)量”屬于”該工作項(xiàng)。

信號(hào)量的另一種常見(jiàn)用法模式與資源保護(hù)模式相反:它是資源生成模式。在此模型中,信號(hào)量計(jì)數(shù)通常為零,但在有工作要完成時(shí)遞增。

請(qǐng)注意,在這種情況下,甚至沒(méi)有信號(hào)量的概念”所有者”,除非你將工作項(xiàng)本身(位于工作列表數(shù)據(jù)結(jié)構(gòu)上的某處)視為所有者。如果 ProcessWork 線程退出,則不希望自動(dòng)釋放信號(hào)量,那會(huì)破壞掉內(nèi)部計(jì)數(shù)。在這種情況下,信號(hào)量是合適的對(duì)象。

(生產(chǎn)者/使用者信號(hào)量的更高性能版本是 I/O 完成端口。)

總結(jié)

既然提到了所謂的高性能版本,我想原作者所表達(dá)的意思是:對(duì)于爾等 C++ 工人來(lái)說(shuō),平常使用無(wú)妨,但是如果是性能攸關(guān)的代碼,頻繁地切換內(nèi)核上下文所帶來(lái)的性能開(kāi)銷(xiāo),不可小視。

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2023-06-02 08:14:58

信號(hào)量對(duì)象線程

2021-04-13 09:20:15

鴻蒙HarmonyOS應(yīng)用開(kāi)發(fā)

2010-04-21 16:50:31

Unix信號(hào)量

2020-11-05 09:59:24

Linux內(nèi)核信號(hào)量

2010-04-21 16:25:13

Unix信號(hào)量

2010-04-21 16:42:48

Unix信號(hào)量

2021-09-07 07:53:42

Semaphore 信號(hào)量源碼

2010-04-21 15:37:38

Unix信號(hào)量

2020-09-25 07:34:40

Linux系統(tǒng)編程信號(hào)量

2024-10-29 15:23:45

Python線程安全

2019-11-19 09:00:38

JavaAND信號(hào)量

2010-03-17 16:36:10

Java信號(hào)量模型

2010-07-15 15:32:10

Perl線程

2009-12-08 12:14:43

2010-04-21 17:10:25

Unix信號(hào)量

2022-12-30 08:35:00

2010-03-16 17:52:27

Java多線程信號(hào)量

2016-11-23 16:08:24

Python處理器分布式系統(tǒng)

2017-05-11 14:05:25

Consul分布式信號(hào)量

2021-02-03 20:10:29

Linux信號(hào)量shell
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)