国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 操作系統(tǒng) > 正文

多線程同步機(jī)制的幾種方法

2024-06-28 13:20:14
字體:
供稿:網(wǎng)友
多線程同步機(jī)制的幾種方法

Critical SectionCritical section(臨界區(qū))用來實(shí)現(xiàn)“排他性占有”。適用范圍是單一進(jìn)程的各線程之間。它是:一個(gè)局部性對(duì)象,不是一個(gè)核心對(duì)象。快速而有效率。不能夠同時(shí)有一個(gè)以上的 critical section 被等待。無法偵測(cè)是否已被某個(gè)線程放棄。

可以實(shí)現(xiàn)線程間互斥,不能用來實(shí)現(xiàn)同步。

SemaphoreSemaphore 被用來追蹤有限的資源。它是:一個(gè)核心對(duì)象。

沒有擁有者。

可以具名,因此可以被其他進(jìn)程開啟。可以被任何一個(gè)線程釋放(released)。

既能實(shí)現(xiàn)線程間互斥,也能實(shí)現(xiàn)線程間同步。

在跨進(jìn)程中使用時(shí),如果擁有信號(hào)量的線程意外結(jié)束,其它進(jìn)程不會(huì)收到通知。

MutexMutex 是一個(gè)核心對(duì)象,可以在不同的線程之間實(shí)現(xiàn)“排他性占有”,甚至即使那些線程分屬不同進(jìn)程。它是:一個(gè)核心對(duì)象。如果擁有 mutex 的那個(gè)線程結(jié)束,則會(huì)產(chǎn)生一個(gè) “abandoned” 錯(cuò)誤信息。i可以具名,因此可以被其他進(jìn)程開啟。只能被擁有它的那個(gè)線程釋放(released)。

在跨進(jìn)程中使用時(shí),如果擁有互斥器的進(jìn)程意外結(jié)束,其它進(jìn)程會(huì)收到一個(gè)WAIT_ABANDOEND消息。

EventEvent object 通常使用于 overlapped I/O,或用來設(shè)計(jì)某些自定義的同步對(duì)象。它是:一個(gè)核心對(duì)象。可是用來實(shí)現(xiàn)線程的互斥與同步。可以具名,因此可以被其他進(jìn)程開啟。

在跨進(jìn)程中使用時(shí),如果擁有信號(hào)量的線程意外結(jié)束,其它進(jìn)程也不會(huì)受到通知。

注意:臨界區(qū)和互斥器都有“線程所有權(quán)”的概念,所以它們是不能用來實(shí)現(xiàn)線程間的同步的,只能用來實(shí)現(xiàn)互斥。原因是由于創(chuàng)建臨界區(qū)或互斥器的線程可以不用等待LeaveCriticalSection(),SetEvent()就可以無條件進(jìn)入保護(hù)的程序段,因?yàn)樗鼡碛羞@個(gè)權(quán)利。另外,互斥器可以很好的處理”遺棄“操作。若線程在未釋放對(duì)向象的時(shí)候就意外終止的,其它線程可以等待到一個(gè)WAIT_ABANDONED_0。但是事件和信號(hào)量都不能做到。

事件和信號(hào)量都可以實(shí)現(xiàn)線程和進(jìn)程間的互斥和同步。

就使用效率來說,臨界區(qū)的效率是最高的,因?yàn)樗皇莾?nèi)核對(duì)象,而其它的三個(gè)都是核心對(duì)象,要借助操作系統(tǒng)來實(shí)現(xiàn),效率相對(duì)來說就比較低。

但如果要跨進(jìn)程使用還是要用到互斥器、事件對(duì)象和信號(hào)量。

總之:在設(shè)計(jì)時(shí),首先盡量不要使用全局變量,如果不得以先然后考慮使用Inter...()函數(shù),然后在是臨界區(qū)對(duì)象,最后才是事件、互斥器、信號(hào)量。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平远县| 井陉县| 西乡县| 苏尼特右旗| 景泰县| 嘉祥县| 日照市| 酒泉市| 许昌县| 尼木县| 庄浪县| 绥芬河市| 广元市| 广东省| 眉山市| 长乐市| 永泰县| 久治县| 万州区| 伊宁市| 潜江市| 阳原县| 乐昌市| 房山区| 仁布县| 盖州市| 宿迁市| 海阳市| 长海县| 桦甸市| 黎平县| 蒙自县| 青河县| 全州县| 濉溪县| 腾冲县| 广西| 土默特左旗| 额尔古纳市| 信宜市| 潍坊市|