鎖操作是為了執行緒安全,下面寫乙個我常用的 c++ 自旋鎖,簡單高效。
#include
#include
#include
#include
#include
#include
#include
#include
template
class rspinlock
}
}
~rspinlock( )
private: t * m_addr;
};
template
class wspinlock
~wspinlock( )
private: t * m_addr;
};
寫自旋鎖中的__sync_bool_compare_and_swap(m_addr, 0, 1)
函式表示當呼叫建構函式時將m_addr
指向的值為 0 時,將其交換為 1 並返回ture
,相當於某個程序拿到了鎖。
當另外的程序呼叫建構函式時,由於m_addr
已經指向 1,__sync_bool_compare_and_swap(m_addr, 0, 1)
則返回false
,那麼這個程序就被鎖在了 while 迴圈中。直到拿到鎖的程序呼叫析構函式將m_addr
指向的值再次修改為 0,釋放調鎖。
需要上鎖時直接在**塊中構造 wspinlock 物件即可。
// 跳出**塊後,自動呼叫 locker 析構函式,釋放掉鎖
讀自旋鎖測試**如下:
#include "rwspinlock.h"
#include
int main()
printf("%d\n", x);
}printf("%d\n", x);
}printf("%d\n", x);
return
0;}
C語言 讀寫鎖
特點 1.讀模式加鎖,其他的讀模式共享,寫模式會阻塞,但寫模式會比其他讀模式的優先順序高 2.寫模式加鎖,其他的讀模式阻塞,寫模式也會阻塞.全阻塞 函式描述 pthread rwlock init 初始化pthread rwlock destroy 銷毀pthread rwlock rdlock 讀...
c 讀寫鎖機制
讀寫鎖是多執行緒同步的另外乙個機制。在一些程式中存在讀操作和寫操作問題,對某些資源的訪問會存在兩種可能情況,一種情況是訪問必須是排他的,就是獨佔的意思,這種操作稱作寫操作,另外一種情況是訪問方式是可以共享的,就是可以有多個執行緒同時去訪問某個資源,這種操作稱為讀操作。這個問題模型是從對檔案的讀寫操作...
LINUX鎖之讀寫鎖(C )
讀寫訊號量 rw semaphore 又叫讀寫鎖。允許多個讀者同時持有該訊號量 當有乙個寫者持有該訊號量時,其他讀者跟寫者不可持有該訊號量 當寫者寫完後,可以降級為讀者。讀寫訊號量使用於讀多寫少的情況下使用。declare rwsem name 宣告乙個讀寫訊號量,並對其初始化 struct rw ...