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

2021-06-18 23:40:59 字數 1139 閱讀 3091

以下**在跨平台環境下包裝了使用者態自選鎖(spinlock),支援以下平台: 作業系統linux、windows,編譯器vc、gcc、mingw

說明:

跨平台巨集(platform.hpp)的定義參見另一篇博文,當然擷取**實現時可以換成自己習慣的定義。跨平台中條件編譯的使用使得**不是那麼容易看,但是還好每個函式只有一兩句話

自旋鎖比互斥量輕量一些,適合使用在輕量任務的多執行緒同步中,會比互斥量高效一些。一般自旋鎖的 lock(), trylock(), unlock() 方法就夠用了。

windows/vc下使用系統api實現,其他情況下使用 pthread 提供的自旋鎖 pthread_spinlock_t

/**

* @file -

* @author jingqi

* @date 2012-03-06

* @last-edit 2012-08-19 18:44:41 jingqi

*/#ifndef ___headfile_d7b6e0b3_59d4_458e_a8eb_0878f6f42145_

#define ___headfile_d7b6e0b3_59d4_458e_a8eb_0878f6f42145_

#include #include #if defined(nut_platform_os_windows) && !defined(nut_platform_cc_mingw)

# include #else

# include #endif

class spinlock

~spinlock()

#if defined(nut_platform_os_windows) && !defined(nut_platform_cc_mingw)

inline critical_section* innermutex()

#else

inline pthread_spinlock_t* innermutex()

#endif

inline void lock()

inline bool trylock()

inline void unlock()

};#endif /* head file guarder */

跨平台中對於 條件量 condition 的包裝

說明 條件量 condition 用於多執行緒同步,乙個條件量常常與乙個鎖 windows下是臨界區,linux下是pthread mutex t 同時使用 跨平台巨集 platform.hpp 的定義參見 另一篇博文 當然擷取 實現時可以換成自己習慣的定義。跨平台中條件編譯的使用使得其實現 不是那...

跨平台中對於 訊號量 semaphore 的包裝

訊號量,常用於執行緒間同步。說明 跨平台巨集 platform.hpp 的定義參見 另一篇博文 當然擷取 實現時可以換成自己習慣的定義。跨平台中條件編譯的使用使得 不是那麼容易看,但是還好每個函式只有幾句話 file author jingqi date 2012 07 10 last edit 2...

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

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