2017-02-02 62 views
1

當使用信號量時,通常爲了強化線程之間的同步,我覺得將信號量初始化爲零是很有用的。Posix:我如何初始化處於鎖定狀態的互斥鎖?

以這種方式,我可以讓一部分代碼在另一個線程在信號量上發出信號後才執行。

這也可以用互斥鎖來實現嗎?

我解釋得更好:當我初始化一個Posix Mutex(例如通過pthread_mutex_init(&mutex,NULL))時,它通常在解鎖狀態下被初始化,所以第一個線程試圖鎖定它會成功。

我想知道是否有一種方法來初始化處於鎖定狀態的互斥鎖(相當於將sem_init(&sem,0,0)與信號量一起使用),也許通過使用一些互斥鎖或其他屬性。

回答

1

不幸的是,似乎沒有辦法來初始化鎖定狀態的互斥鎖。根據opengroup

的調用pthread_mutex_init()函數將初始化由互斥與attr指定的屬性引用的互斥。如果attr爲NULL,則使用缺省的互斥量屬性;效果應該與傳遞默認互斥對象屬性的地址相同。 成功初始化後,互斥鎖的狀態將被初始化並解鎖。

因此我們必須手動鎖定它。包裝函數可能使事情變得更加難看:-)