2011-05-28 365 views
3

使用C++,在我的析構函數中的一個,我說如何正確刪除互斥鎖?

mutex = NULL; 

然而,這導致我的Xcode錯誤「No viable overloaded '='」。

同一個互斥以前初始化在構造函數

mutex = PTHREAD_MUTEX_INITIALIZER; 

請指教,我如何能夠妥善處理這是C++的析構函數

+0

您可以使用'pthread_mutex_destroy()'銷燬互斥對象。 – bacchus 2011-05-28 01:25:21

+0

@Bacchus,這應該是一個答案,所以我可以upvote它。 :) – sarnold 2011-05-28 01:30:45

+0

@Bachhus請「回答」,所以我可以給你信用 – JAM 2011-05-28 01:31:40

回答

5

的一部分,您可以使用pthread_mutex_destroy()破壞互斥對象。

按照POSIX規格:

的pthread_mutex_destroy()函數 應銷燬mutex引用互斥對象 ;互斥對象 實際上變爲未初始化。 實現可能導致 pthread_mutex_destroy()將互斥體引用的對象 設置爲 無效值。可以使用 pthread_mutex_init()重新初始化被銷燬的互斥對象 ; 否則引用 之後的對象的結果是未定義的。

+1

+1。原始嘗試不起作用的原因當然是'NULL'不是'pthread_mutex_t'(並且沒有可行的轉換)。 – 2011-05-28 01:36:03

2

正如bacchus所說,使用pthread_mutex_destroy()。如果互斥量是C++類的成員,我想知道爲什麼您使用PTHREAD_MUTEX_INITIALIZER而不是使用pthread_mutex_init()來初始化它,因爲宏窗體更適合於初始化而非分配。

3

不需要在靜態分配的互斥體上使用pthread_mutex_destroy。如果你的互斥體被分配到堆棧或堆上,你應該使用pthread_mutex_init和pthread_mutex_destroy。最重要的是確保互斥體在破壞之前解鎖。