1. 程式人生 > >lock-free&wait-free

lock-free&wait-free

1.概念定義:

2.我的理解:

lock-free:需要取得鎖的執行緒在有限步驟或時間內內就可以成功(多數執行緒都會成功,一些可能失敗,比wait-free語義稍弱)

wait-free:需要取得鎖的執行緒在有限步驟或時間內內就可以成功(任意執行緒都會成功,語義更加強烈)

3.例子(引用):


do { pred = tail;
} while(!tail.compareAndSet(pred, node));
這部分程式碼就是lock-free的,分析如下:

假如多個執行緒(T1,T2)同時執行這段程式碼,無論T1和T2誰先執行,或者同時執行,最後都會成功。但是這似乎很明顯,不能凸顯lock-free的特徵。但是如果T1在執行過程中發生了睡眠或掛起,那麼T2到底是跟著block還是繼續執行呢?這一點就是lock-free和mutex lock的區別,在mutex lock中,如果T1在獲得鎖之後發生掛起,那麼T2也會跟著被block。但是在lock-free中,即使T1發生了掛起,T2還是會繼續執行。

(內在原因:compareAndSet是硬體指令實現的,硬體的指令都是原子級別的,即在執行這個指令的過程中,不能被系統中斷,沒有所謂的執行到指令的一半時發生掛起,如此保證了lock-free中即使T1掛起,T2還是會執行。但是在mutex lock中,在T1獲得鎖之後是可以睡眠的,如

lock(T1);

do something; //此時發生掛起

這時T2就會被block。


4.參考文獻:

相關推薦

lock-free&wait-free

1.概念定義: 2.我的理解: lock-free:需要取得鎖的執行緒在有限步驟或時間內內就可以成功(多數執行緒都會成功,一些可能失敗,比wait-free語義稍弱) wait-free:需要取得鎖的執行緒在有限步驟或時間內內就可以成功(任意執行緒都會成功,語義更加強烈

lock-free/wait-free演算法以及ABA問題

I recently read a paper on Hazard Pointers[2] and thought I would share what I learned and some general information on lock-free/wait-free programming. I

java多執行緒之synchronized與lockwait與notify

class Res { public String name; public String sex; public Boolean flag = false; public Lock lock = new ReentrantLock(); Condition condition = lock.new

使用Lockwait/notify,Semaphore三種方式實現多執行緒通訊

java的多執行緒通訊有Lock,wait/notify,Semaphore三種方式,以一道常見面試題來簡單演示這三種多執行緒通訊方式。 兩個執行緒迴圈間隔列印指定內容,一個列印從1到52的數字,一個列印從A到Z的字母,列印輸出如下: 1 2 A 3 4 B ..

A Fast Lock-Free Queue for C++

rup ebo rtai ons version header ecif website barriers (轉自) http://moodycamel.com/blog/2013/a-fast-lock-free-queue-for-c++ Sharing data

[Paper翻譯]Scalable Lock-Free Dynamic Memory Allocation

free mas point 出現 前綴 影響 ati bit 同步 原文: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.87.3870&rep=rep1&type=pdf Abstrac

lock-free介紹

無鎖程式設計 / lock-free / 非阻塞同步 無鎖程式設計,即不使用鎖的情況下實現多執行緒之間的變數同步,也就是在沒有執行緒被阻塞的情況下實現變數的同步,所以也叫非阻塞同步(Non-blocking Synchronization)。 實現非阻塞同步的方案稱為“無鎖程式設計演算法”(

原子指令於Lock-Free資料結構教學筆記

原文:http://faculty.ycp.edu/~dhovemey/spring2011/cs365/lecture/lecture20.html 示例程式碼:AtomicInstructions.zip 原子指令 原子指令是特殊的硬體指令,以不可分的方式對一個或多個記憶體位

併發程式設計(三): 使用C++11實現無鎖stack(lock-free stack)

C++11中CAS實現: template< class T> struct atomic { public: bool compare_exchange_weak( T& expected, T desired,                    

無鎖程式設計:lock-free原理;CAS;ABA問題

定義 無鎖程式設計是指在不使用鎖的情況下,在多執行緒環境下實現多變數的同步。即在沒有執行緒阻塞的情況下實現同步。這樣可以避免競態、死鎖等問題。 原理 CAS是指Compare-and-swap或Compare-and-Set  CAS是一個原子操作,用於多執行緒環境下的同步

無鎖的資料結構(Lock-Free)及CAS(Compare-and-Swap)機制

當同時存在讀寫執行緒時,預設情況下是不保證執行緒安全的,因而需要利用訊號量來進行執行緒同步(Synchronization),如關鍵程式碼段、互斥體等,同時作業系統也提供了相應的API。然而同步並不總是滿足條件的且有效率的,比如陷入核心時會有效能損失、死鎖、活鎖以及資源浪費

並行程式設計中的lock free技術

lock free (中文一般叫“無鎖”,一般指的都是基於CAS指令的無鎖技術) 是利用處理器的一些特殊的原子指令來避免傳統並行設計中對鎖(lock)的使用。 眾所周知,鎖在解決並行過程中資源訪問問題的同時可能會引入諸多新的問題,比如死鎖(dead lock),另外鎖的申請/

C++併發實戰19:lock free程式設計

     涉及到並行/併發計算時,通常都會想到加鎖,加鎖可以保護共享的資料,不過也會存在一些問題: 1. 由於臨界區無法併發執行,進入臨界區就需要等待,加鎖使得效率的降低。多核CPU也不能發揮全部馬力 2. 在複雜的情況下,很容易造成死鎖,併發程序、執行緒之間無止境的互相等

無鎖程式設計:lock-free原理

定義 原理 ABA問題 解決方法 定義 無鎖程式設計是指在不使用鎖的情況下,在多執行緒環境下實現多變數的同步。即在沒有執行緒阻塞的情況下實現同步。這樣可以避免競態、死鎖等問題。 原理 CAS是指Compare-and-swap或Comp

日本程序開發式自定義的malloc/free函數(三)-源代碼(ソースコード)

size span 鏈表 pan ppp 附近 efi ret system 這篇文章終於是貼出了我們的源代碼,實現每個功能也是花費了許多時間,大家在編寫的時候可以多花點時間,多嘗試,多看就能寫出來。 老師的要求不能在程序裏面使用malloc,new什麽的,有要求使用鏈表,

malloc: *** error for object 0x6080000bd200: Invalid pointer dequeued from free list *** set a breakpoint in malloc_error_break to debug

版本 解決 pointer 系統 解決方法 all list object ued 在集成第三方sdk的時候碰到這個問題, malloc: *** error for object 0x6080000bd200: Invalid pointer dequeued from

free:一個在 Linux 中檢查內存使用情況的標準命令

合作夥伴 sre 最新 shm cached spa 交換 比較 廣泛 摘要: 我們都知道, IT 基礎設施方面的大多數服務器(包括世界頂級的超級計算機)都運行在 Linux 平臺上,因為和其他操作系統相比, Linux 更加靈活。有的操作系統對於一些微乎其微的改動和補丁更

面對Schema free 的MongoDB,如何規範你的schema

conda man ould 關聯 tom primary reg 哈哈 persist http://www.mongoing.com/archives/2282 總的來說,限制MongoDB的Schema,有兩個主要工具: variety:查看collections中各

malloc 和free例程

就會 ret sca stdlib.h int 註意 申請 printf malloc #include <stdio.h>#include <stdlib.h>int main(){int a;scanf("%d",&a);int *p=(

Linux進程管理 - PRI,nice,free,uname,netstat

table 內存不足 不一定 影響 表示 order net 喚醒 總計 優先執行序 (priority, PRI) 這個 PRI 值越低代表越優先的意思。只是這個 PRI 值是由核心動態調整的, 使用者無法直接調整