使用boost條件變數實現寫優先的讀

2021-07-05 17:23:20 字數 1002 閱讀 5361

測試發現,boost thread庫實現的讀寫鎖是讀優先的(這一點我現在也不確定了,發現讀寫鎖與執行平台關係太大了,windows 或linux,amd還是intel,常常導致測試結果大相徑庭)。所以當讀執行緒多的時候,幾乎無法獲取寫鎖。大部分時候,寫優先也許更符合應用的需求。我參考網上**,使用boost條件變數和臨界區,實現了乙個寫優先的讀寫鎖。優點是寫優先,而且**邏輯很清晰,缺點是……效率可能比較低。為什麼說可能而不是給出量化資料,是因為我發現不同的讀寫鎖實現,效率與執行的平台關係太大了。**如下:

#pragma once

#include

class read_write_mutex

~read_write_mutex(){}

void lock_read()

++ read_cnt;

}void unlock_read()

}void lock_write()

++ write_cnt;

-- wait_write_cnt; 

}void unlock_write()

else

}private:

boost::mutex mutex;

volatile int read_cnt;

volatile int write_cnt;

volatile int wait_write_cnt;

boost::condition_variable allow_write_cond;

boost::condition_variable allow_read_cond;

};class scoped_rlock

~scoped_rlock()

private:

read_write_mutex& mutex;

};class scoped_wlock

~scoped_wlock()

private:

read_write_mutex& mutex;

};

boost條件變數使用

條件變數和互斥變數都是boost庫中被封裝的類。條件變數是thread庫提供的一種等待執行緒同步的機制,可實現執行緒間的通訊,它必須與互斥量配合使用,等待另乙個執行緒中某個事件發生後本執行緒才能繼續執行。互斥量是一種用於多執行緒程式設計的手段,它可以在多執行緒程式設計中防止多個執行緒同時操作共享資源...

boost庫 條件變數

條件變數和互斥變數都是boost庫中被封裝的類。條件變數是thread庫提供的一種等待執行緒同步的機制,可實現執行緒間的通訊,它必須與互斥量配合使用,等待另乙個執行緒中某個事件發生後本執行緒才能繼續執行。互斥量是一種用於多執行緒程式設計的手段,它可以在多執行緒程式設計中防止多個執行緒同時操作共享資源...

條件變數 實現同步

作用 用於實現執行緒間同步 條件變數通過提供執行緒等待,直到被喚醒的程序喚醒,從而實現執行緒同步 條件變數本身不具備條件判斷功能 也就是意味著什麼時候該等待,什麼時候該喚醒等待的執行緒,都需要使用者來控制 流程需要和互斥鎖搭配使用,使用者對臨界資源進行判斷,如果需要那麼就要將其加入到等待佇列上,判斷...