2015-02-10 29 views
0

只有互斥鎖的擁有者才能解鎖它。但是,互斥體如何區分鎖定它的線程? Linux中的線程是否有特色?pthread_mutex_unlock如何區分線程?

+0

關於C中的多線程,C11增加了'threads.h',所以現在基本上C支持比以前更高級別的線程抽象。 – HuStmpHrrr 2015-02-10 16:46:19

+0

N.B.程序員有責任確保只有所有者解鎖一個互斥鎖,通常不需要互斥鎖來驗證正確的線程是否解鎖它。 (在glibc中,所有者的線程ID存儲在互斥鎖中,這對調試很有用,但POSIX不要求這樣做)。 – 2015-02-10 17:23:57

+0

@JonathanWakely:它是遞歸和錯誤檢查互斥體類型所必需的。 – 2015-02-10 18:32:54

回答

3

您可以查看實現源代碼以獲取詳細信息(來自GNU的pthread實現libc Git存儲庫可以瀏覽here),但是它們具有內部使用的不同ID。您可以在應用程序級別使用pthread_self()來查看。它會返回一個pthread_t值,該值在給定進程內基於每個線程是唯一的。當比較來自不同進程的pthread_t值時,不保證唯一性。

pthread_t對應的實際類型是實現定義的,但是;它可以是算術(例如整數)類型,或者它可以是結構。因此,除了使用pthread_equal()來比較它們的平等之外,你無法用便攜的方式真正做到這一點。

2

它們使用線程標識進行區分;