線程同步

線程同步

計算機術語
同步就是協同步調,按預定的先後次序進行運行。如:你說完,我再說。“同”字從字面上容易理解為一起動作其實不是,“同”字應是指協同、協助、互相配合。如進程、線程同步,可理解為進程或線程A和B一塊配合,A執行到一定程度時要依靠B的某個結果,于是停下來,示意B運行;B依言執行,再将結果給A;A再繼續操作。所謂同步,就是在發出一個功能調用時,在沒有得到結果之前,該調用就不返回,同時其它線程也不能調用這個方法。
    中文名:線程同步 外文名:thread synchronization 适用領域: 所屬學科: 類型:理論 應用:物理 定義:協同步調,按預定的先後次序進行

舉例說明

在Java裡面,通過synchronized進行同步的保證。

在C++11裡面,通過std::mutex的加鎖和解鎖來保證。

方式

    互斥鎖(Mutex)nn

互斥量是最簡單的同步機制,即互斥鎖。多個進程(線程)均可以訪問到一個互斥量,通過對互斥量加鎖,從而來保護一個臨界區,防止其它進程(線程)同時進入臨界區,保護臨界資源互斥訪問。nn

2.條件變量(conditionvariable)nn

條件變量适合多個進程(線程)等待同一事件發生,然後去幹某事。舉一個簡單的例子:

生産者和消費者模型:n

多個消費者去等待生産者生産物品,消費者去消耗物品。當生産者生産出來一件物品時,便可以通知所有的消費者(當然也可以隻通知其中一個等待的消費者)---可以去消耗物品了。這時多個消費者便去争搶物品,誰快誰拿到物品消耗。當物品被消耗完時,消費者就等待生産者。就類似于這樣的場景。n

條件變量必須配合互斥量一起工作。為什麼?因為生産者生産出來的物品是臨界資源,即所有進程和線程都可以使用的公共資源,則在一個時刻僅允許一個消費者去取。這時便使用互斥量去保護臨界資源。n

3.讀寫鎖(reader-writerlock)n

讀寫鎖适合于使用在讀操作多,寫操作少的情況,比如數據庫。讀寫鎖讀鎖可以同時加很多,但是寫鎖是互斥的。當有進程或者線程要寫時,必須等待所有的讀進程或者線程都釋放自己的讀鎖方可以寫。數據庫很多時候可能隻是做一些查詢。nn

4.信号量(semaphore)nn

在生産者消費者模型中,對任務數量的記錄就可以使用信号量來做。可以理解為帶計數的條件變量。當信号量的值小于0時,工作進程或者線程就會阻塞,等待物品到來。當生産者生産一個物品,會将信号量值加1操作。這是會喚醒在信号量上阻塞的進程或者線程,它們去争搶物品。

上一篇:全局變量

下一篇:二叉排序樹

相關詞條

相關搜索

其它詞條