1. 程式人生 > >互斥鎖,同步鎖,臨界區,互斥量,訊號量,自旋鎖之間聯絡

互斥鎖,同步鎖,臨界區,互斥量,訊號量,自旋鎖之間聯絡

互斥鎖和互斥量在我的理解裡沒啥區別,不同叫法。廣義上講可以值所有實現互斥作用的同步機制。狹義上講指的就是mutex這種特定的二元鎖機制。

互斥鎖的作用就是互斥,mutual exclusive,是用來保護臨界區(critical section)的。所謂臨界區就是程式碼的一個區間,如果兩個執行緒同時執行就有可能出問題,所以需要互斥鎖來保護。

訊號量(semaphore)是一種更高階的同步機制,mutex可以說是semaphore在僅取值0/1時的特例。Semaphore可以有更多的取值空間,用來實現更加複雜的同步,而不單單是執行緒間互斥。

自旋鎖是一種互斥鎖的實現方式而已,相比一般的互斥鎖會在等待期間放棄cpu,自旋鎖(spinlock)則是不斷迴圈並測試鎖的狀態,這樣就一直佔著cpu。

同步鎖好像沒啥特殊說法,你可以理解為能實現同步作用的都可以叫同步鎖,比如訊號量。

最後,不要鑽這些名詞的牛角尖,更重要的是理解這些東西背後的原理,叫什麼名字並沒有什麼好說的。這些東西在不同的語言和平臺上又有可能會有不同的叫法,其實本質上就這麼回事。

相關推薦

互斥同步臨界互斥訊號之間聯絡

互斥鎖和互斥量在我的理解裡沒啥區別,不同叫法。廣義上講可以值所有實現互斥作用的同步機制。狹義上講指的就是mutex這種特定的二元鎖機制。互斥鎖的作用就是互斥,mutual exclusive,是用來保護臨界區(critical section)的。所謂臨界區就是程式碼的一個區間,如果兩個執行緒同時執行就有可能

執行緒同步機制(互斥讀寫條件變數屏障)

先知:      (1)執行緒是由程序建立而來,是cpu排程的最小單位。      (2)每個程序都有自己獨立的地址空間,而程序中的多個執行緒共用程序的資源,他們只有自己獨立的棧資源。 執行緒同步:      當多個控制執行緒共享相同的記憶體時,需要確保每個程序看到一致的

作業系統 +訊號+互斥+臨界+死的區別

自旋鎖(SpinLock) 自旋鎖是專為防止多處理器併發而引入的一種鎖。如果是單核處理器,則自旋鎖定義為空操作,因為簡單的關閉中斷即可實現互斥。   自旋鎖最多隻能被一個執行緒持有,如果一個執行緒試圖請求一個已被爭用(已被另一個執行緒持有)的自旋鎖,那麼等待自旋鎖的執行緒將會反

訊號, 互斥

一、訊號量 訊號量又稱為訊號燈,它是用來協調不同程序間的資料物件的,而最主要的應用是共享記憶體方式的程序間通訊。本質上,訊號量是一個計數器,它用來記錄對某個資源(如共享記憶體)的存取狀況。一般說來,為了獲得共享資源,程序需要執行下列操作:    (1) 測試控制該資源的訊號量。    (2) 若此訊號

java同步優化方案學習筆記(偏向輕量級重量級

目錄 一,概述 二,CAS 一,概述 什麼是java的鎖? 為什麼java要有鎖? java的鎖為什麼需要優化? 怎麼優化的? 1,java中使用synchronized關鍵字來實現同步功能,被synchronized修飾的方法

Java 中15種的介紹:公平可重入獨享互斥樂觀分段等等

Java 中15種鎖的介紹 在讀很多併發文章中,會提及各種各樣鎖如公平鎖,樂觀鎖等等,這篇文章介紹各種鎖的分類。介紹的內容如下: 公平鎖 / 非公平鎖 可重入鎖 / 不可重入鎖 獨享鎖 / 共享鎖 互斥鎖 / 讀寫鎖 樂觀鎖 / 悲觀鎖 分段鎖

多執行緒——原子、非原子互斥

nonatomic:非原子屬性,執行緒不安全的,效率高 atomic:原子屬性,執行緒安全的,效率相對低。 原子屬性是一種單(執行緒)寫多(執行緒)讀的多執行緒技術,不過可能會出現髒資料 atomi

臨界互斥的區別

一直沒弄清楚這兩個東東的區別,希望能好好總結下。上次面試也問到了這方面的相關問題,回答得不是很好。 臨界區 1.1臨界區原理: 首先明白臨界區是指一段程式碼,這段程式碼是用來訪問臨界資源的。臨界資源可以是硬體資源,也可以是軟體資源。但它們有一個特點就是,一次僅允許一個程序

C# lock 語法糖實現原理--《.NET Core 底層入門》之互斥混合讀寫

在多執行緒環境中,多個執行緒可能會同時訪問同一個資源,為了避免訪問發生衝突,可以根據訪問的複雜程度採取不同的措施 原子操作適用於簡單的單個操作,無鎖演算法適用於相對簡單的一連串操作,而執行緒鎖適用於複雜的一連串操作 ### 原子操作 修改狀態要麼成功且狀態改變,要麼失敗且狀態不變,並且外部只能觀察到修改

讀寫和順序的實現原理

並且 保護 表達 min 返回 create creat rwlock ini 常用的同步原語鎖,到多核處理器時代鎖已經是必不可少的同步方式之一了。無論設計多優秀的多線程數據結構,都避不開有競爭的臨界區,此時高效的鎖顯得至關重要。鎖的顆粒度是框架/程序設計者所關註的,

適應(不看後悔看了必懂)

自旋鎖 所謂自旋,就是指當有另外一個執行緒來競爭鎖時,這個執行緒會在原地迴圈等待,而不是把該執行緒給阻塞,直到那個獲得鎖的執行緒釋放鎖之後,這個執行緒就可以馬上獲得鎖的。鎖在原地迴圈的時候,是會消耗cpu的,就相當於在執行一個啥也沒有的for迴圈。 本來一個執行緒把鎖釋放之後,當前執行緒

【執行緒同步臨界互斥

Win32 中關於程序和執行緒的協調工作是由同步機制來完成的,同步機制相當於執行緒間的紅綠燈。 一. 同步和非同步 舉個例子: PostMessage(),是把訊息放到對方的訊息佇列中,然後不管三七二十一,就回到原呼叫點繼續執行,這就是非同步。 SendMessage(),就像呼叫一

偏向輕量級重量級的詳細介紹

何為同步?JVM規範規定JVM基於進入和退出Monitor物件來實現方法同步和程式碼塊同步,但兩者的實現細節不一樣。程式碼塊同步是使用monitorenter和monitorexit指令實現,而方法同步是使用另外一種方式實現的,細節在JVM規範裡並沒有詳細說明,但是方法的同步

順序性一致性原子性:現代多核體系結構與原子操作·CAS與·與併發程式設計的原語·語句原子性和程式設計邏輯的原子性·行與資料庫事務原子性·binlog與資料庫同

順序性: 亂序執行·邏輯正確性  現代體系結構的每一個核的指令流水是亂序執行的,但是他能夠保證其執行效果正確,即等同於順序執行。 不過這帶來的問題是對於一個核在主觀上它的執行狀態最終保證正確,但是對於別的核,如果在某一箇中間時間點需要觀察它呢?看到的是一個不正確的

c++執行緒併發:mutexatomicspinlock單執行緒

自旋鎖直接呼叫了boost庫的#include <boost/smart_ptr/detail/spinlock.hpp> 測試執行緒併發的情況下耗時,不太明白為什麼boost的spinl

執行緒同步總結--臨界 事件 互斥 訊號

在WIN32中,同步機制主要有以下幾種: 臨界區(Critical section) 事件(Event); 互斥量(mutex); 訊號量(semaphore);   臨界區(Critical section) 臨界區(Cri

JAVA機制-可重入,可中斷公平讀寫

部落格引用處(以下內容在原有部落格基礎上進行補充或更改,謝謝這些大牛的部落格指導): JAVA鎖機制-可重入鎖,可中斷鎖,公平鎖,讀寫鎖,自旋鎖 在併發程式設計中,經常遇到多個執行緒訪問同一個 共享資源 ,這時候作為開發者必須考慮如何維護資料一致性,在java中synchronized

Delphi執行緒同步臨界互斥訊號

  當有多個執行緒的時候,經常需要去同步這些執行緒以訪問同一個資料或資源。   例如,假設有一個程式,其中一個執行緒用於把檔案讀到記憶體,而另一個執行緒用於統計檔案的字元數。當然,在整個檔案調入記憶體之前,統計它的計數是沒有意義的。但是,由於每個操作都有自己的執行緒,作業系統會把兩個執行緒當做是互不相干的任

核心下各種同步處理方法(、訊號燈、互斥體…)

轉自:http://www.blogfshare.com/kernel-synchronization.html 1.在支援多執行緒的作業系統下,有些函式會出現不可重入的現象。所謂“可重入”是指函式的執行結果不和執行順序有關。反之如果執行結果和執行順序有關,則稱這個函式是

虛擬機器內的優化(偏向輕量級重量級

基礎知識之一:鎖的型別 鎖從巨集觀上分為:(1)樂觀鎖;(2)悲觀鎖。 (1)樂觀鎖 樂觀鎖是一種樂觀思想,即認為讀多寫少,遇到併發寫的可能性低,每次去拿資料的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個