2010-08-24 73 views
2

是否存在使用PTHREAD_MUTEX_INITIALIZER靜態初始化pthread互斥鎖並將它們直接傳遞給鎖定的已知問題?應該避免使用PTHREAD_MUTEX_INITIALIZER進行pthread_mutex靜態初始化嗎?

注:使用PTHREAD_MUTEX_INITIALIZER不會立即初始化互斥鎖互斥鎖初始化

我在一些網站,這不能在所有平臺上得到保證,也是在幫助頁面下面的說明是讀取。相反,在第一次使用時,pthread_mutex_lock()或pthread_mutex_trylock()函數分支到慢速路徑並導致互斥體的初始化。由於互斥不只是一個簡單的內存對象,並要求一些資源被系統分配,試圖調用使用PTHREAD_MUTEX_INITIALER一個靜態初始化,尚未鎖定導致EINVAL錯誤互斥pthread_mutex_destroy()或調用pthread_mutex_unlock() 。

因此,如果兩個線程靜態初始化後的pthread_mutex_lock調用,它會導致什麼問題?

回答

2

我認爲這不是問題。 鑑於POSIX線程定義了API但不是實現。如果某些實現選擇了某種特殊方法,則不是問題。但是應該保證調用pthread_mutex_lock的正確行爲。