測試發現,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庫提供的一種等待執行緒同步的機制,可實現執行緒間的通訊,它必須與互斥量配合使用,等待另乙個執行緒中某個事件發生後本執行緒才能繼續執行。互斥量是一種用於多執行緒程式設計的手段,它可以在多執行緒程式設計中防止多個執行緒同時操作共享資源...
條件變數 實現同步
作用 用於實現執行緒間同步 條件變數通過提供執行緒等待,直到被喚醒的程序喚醒,從而實現執行緒同步 條件變數本身不具備條件判斷功能 也就是意味著什麼時候該等待,什麼時候該喚醒等待的執行緒,都需要使用者來控制 流程需要和互斥鎖搭配使用,使用者對臨界資源進行判斷,如果需要那麼就要將其加入到等待佇列上,判斷...