我的互斥體類的定義: -當我在已經鎖定的pthread_mutex_t上執行pthread_mutex_init時會發生什麼?
class Mutex{
static pthread_mutex_t mutex;
public:
Mutex(){
pthread_mutex_init(&mutex, NULL);
while(pthread_mutex_trylock(&mutex)){
sleep(2000);
}
}
virtual ~Mutex(){
pthread_mutex_unlock(&mutex);
pthread_mutex_destroy(&mutex);
}
};
我想申請互斥使用這個類像這樣的功能: -
void doSomething(){
Mutex mutex;
// do something
}
這樣當構造函數被調用時,互斥體被初始化,它試圖獲得該互斥鎖上的鎖。當它從這個函數的範圍中消失時,它會自動被破壞。
但是,如果一個線程在互斥鎖上有鎖,另一個線程會嘗試運行pthread_mutex_init
,究竟發生了什麼?具有鎖的線程是否會被覆蓋?
鼻惡,當然。 –
未定義的行爲。答案是簡短回答:)) – tty6
我試圖弄清楚從這個實現中可能會有哪些可能的好處,但我找不到任何東西。另外,除非你仍然在pre-C++ 11-land中,否則我不會看到沒有任何地球或其他理由不使用['std :: mutex'](http://en.cppreference.com/w/cpp/thread/mutex)和線程支持庫的其餘產品。 – WhozCraig