我常用的 C 讀寫鎖

2021-07-15 12:36:02 字數 1074 閱讀 1509

鎖操作是為了執行緒安全,下面寫乙個我常用的 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 ...