2015-07-05 108 views
0

我看到了一些關於使用互斥鎖的示例程序。我只是想知道一個線程是否必須獲得互斥體的所有權才能關閉句柄,因爲其中一個例子在main()中創建了一個互斥體。線程是否需要獲取互斥鎖的所有權來關閉互斥鎖的句柄

ghmu_handle = CreateMutex(NULL, false, NULL); 

然後它

  • 創建的線程和
  • 線程獲得互斥體的所有權和
  • 它做了關鍵部分的一些工作和
  • 使用發佈的互斥ReleaseMutex()。
  • 現在main()只是簡單地叫做CloseHandle(ghmu_handle)而沒有獲得所有權。

這是正確的方式,還是我們需要獲得所有權關閉處理?

回答

1

不,你不需要擁有互斥鎖來關閉句柄。這將是一個不合理的要求,因爲它可能無法聲明互斥量的所有權,例如,如果另一個進程擁有它。

另請注意,不能在沒有手柄的情況下釋放互斥鎖。

+0

您需要擁有**才能釋放**互斥量。您不需要所有權來**關閉**互斥鎖句柄。 –