linux的mutex状态查询命令,如何断言std :: mutex是否已锁定?
使用GCC 4.8.2(在Linux / Debian / Sid 64位上)或GCC 4.9(在C ++ 11中可用)-我有一些互斥鎖
std::mutex gmtx;
實際上,它是static某個類的成員,Foo同時包含下面的alpha和beta方法。
它被鎖定alpha像
void alpha(void) {
std::lock_guard<:mutex> g(gmtx);
beta(void);
// some other work
}
我想檢查beta一下確實gmtx被鎖定了:
void beta(void) {
assert (gmtx.is_locked());
// some real work
}
(is_locked僅在內部調用的通知assert。。。效率可能非常低下,有時甚至不準確)
當然,我還有其他函數調用beta,例如
void gamma(void) {
std::lock_guard<:mutex> g(gmtx);
beta();
// some other work
}
但is_locked不存在。…我應該如何定義它?(實際上,我想確保互斥體已被某些[間接]調用者鎖定在同一線程中。)
(我要測試的原因assert是beta可以在其他地方調用)
我不能使用try_lock(除非使用遞歸互斥鎖),因為在通常情況下,它將鎖定一個已經鎖定的互斥鎖…(由調用方鎖定在同一線程中),這不僅是未定義的行為,而且是完全阻塞的。
除非確實需要,否則我想避免使用遞歸互斥鎖(比普通互斥鎖更昂貴)。
注意:真正的程序要復雜一些。實際上,所有方法都在一個類中,該類維護“項目”上的命名雙向關系。所以我在該類中有一個從項目到名稱的映射,另一個是從名稱到項目的映射。beta將內部方法添加一個真正的命名,并alpha和gamma會發現它的名稱,或通過其項目的名稱-
或加入-一個項目的方法。
PS:真正的程序尚未發布,但應該成為MELT的一部分-
將來的監視器;您可以從此處(一個臨時位置)下載它(Alpha舞臺,非常容易出錯)
總結
以上是生活随笔為你收集整理的linux的mutex状态查询命令,如何断言std :: mutex是否已锁定?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux cvs服务,Linux环境下
- 下一篇: linux 其他常用命令