使用C++,在我的析構函數中的一個,我說如何正確刪除互斥鎖?
mutex = NULL;
然而,這導致我的Xcode錯誤「No viable overloaded '='
」。
同一個互斥以前初始化在構造函數
mutex = PTHREAD_MUTEX_INITIALIZER;
請指教,我如何能夠妥善處理這是C++的析構函數
使用C++,在我的析構函數中的一個,我說如何正確刪除互斥鎖?
mutex = NULL;
然而,這導致我的Xcode錯誤「No viable overloaded '='
」。
同一個互斥以前初始化在構造函數
mutex = PTHREAD_MUTEX_INITIALIZER;
請指教,我如何能夠妥善處理這是C++的析構函數
的一部分,您可以使用pthread_mutex_destroy()
破壞互斥對象。
按照POSIX規格:
的pthread_mutex_destroy()函數 應銷燬mutex引用互斥對象 ;互斥對象 實際上變爲未初始化。 實現可能導致 pthread_mutex_destroy()將互斥體引用的對象 設置爲 無效值。可以使用 pthread_mutex_init()重新初始化被銷燬的互斥對象 ; 否則引用 之後的對象的結果是未定義的。
+1。原始嘗試不起作用的原因當然是'NULL'不是'pthread_mutex_t'(並且沒有可行的轉換)。 – 2011-05-28 01:36:03
正如bacchus所說,使用pthread_mutex_destroy()
。如果互斥量是C++類的成員,我想知道爲什麼您使用PTHREAD_MUTEX_INITIALIZER
而不是使用pthread_mutex_init()
來初始化它,因爲宏窗體更適合於初始化而非分配。
不需要在靜態分配的互斥體上使用pthread_mutex_destroy。如果你的互斥體被分配到堆棧或堆上,你應該使用pthread_mutex_init和pthread_mutex_destroy。最重要的是確保互斥體在破壞之前解鎖。
您可以使用'pthread_mutex_destroy()'銷燬互斥對象。 – bacchus 2011-05-28 01:25:21
@Bacchus,這應該是一個答案,所以我可以upvote它。 :) – sarnold 2011-05-28 01:30:45
@Bachhus請「回答」,所以我可以給你信用 – JAM 2011-05-28 01:31:40