一種簡單的跨平台使用者態自旋鎖

2022-04-08 21:18:43 字數 1283 閱讀 6857

前言

自旋鎖作為一種併發同步的手段,特別適用於競爭少和鎖時間短的情況,在驅動及核心**中經常被用到,本文講述一種適合使用者態程式的自旋鎖,支援win32+vc和linux+gcc(>=4.1.2)平台,並提供了c語言的介面和實現,詳見下文。 介面

1#ifdef __cplusplus

2extern "c" spin_lock_t;

1112void spin_init(spin_lock_t* lock,long* flag);

1314void spin_lock(spin_lock_t* lock);

1516int spin_trylock(spin_lock_t* lock);

1718void spin_unlock(spin_lock_t* lock);

1920int spin_is_lock(spin_lock_t* lock);

2122#ifdef __cplusplus

23}24#endif

實現 www.2cto.com 一年十二月 誰主春秋

1#ifdef _msc_ver

2#include

3#elif defined(__gnuc__)

4#if __gnuc__<4 || (__gnuc__==4 && __gnuc_minor__<1)

5#error gcc version must be greater or equal than 4.1.2

6#endif

7#include

8#else

9#error currently only windows and linux os are supported

10#endif

1112void spin_init(spin_lock_t* lock,long* flag)

1322

23void spin_lock(spin_lock_t* lock)

2430#elif defined(__gnuc__)

31    for (;0!=__sync_fetch_and_or(lock->spin_,1);)

32   

35#endif

36}37

38int spin_trylock(spin_lock_t* lock)

3946

47void spin_unlock(spin_lock_t* lock)

4855

56int spin_is_lock(spin_lock_t* lock)

57

一種簡單的跨平台互斥鎖

前言 互斥鎖,用來保證任一時刻只有單個執行緒或程序擁有對共享資源的互斥訪問權,在這裡將posix thread中的互斥體 win32中的互斥體和臨界區,統稱為互斥鎖,其特點如下 範圍 執行緒鎖和程序鎖,前者僅用於同一程序內多執行緒間,而後者用於程序間,顯然,它也能用於同一程序內多執行緒間,但效率較低...

跨平台中對於 自旋鎖 spinlock 的包裝

以下 在跨平台環境下包裝了使用者態自選鎖 spinlock 支援以下平台 作業系統linux windows,編譯器vc gcc mingw 說明 跨平台巨集 platform.hpp 的定義參見另一篇博文,當然擷取 實現時可以換成自己習慣的定義。跨平台中條件編譯的使用使得 不是那麼容易看,但是還好...

對互斥鎖的一種封裝

include typedef pthread t mutex t 主要用於定義互斥鎖的定義,以及提供加鎖解鎖的介面 class sth mutex sth mutex private int lock int unlock int destroy private mutex t mutex end...