簡體   English   中英

Mutex.timed_lock(duration)和boost :: timed_mutex :: scoped_lock scoped_lock(mutex,duration)之間的區別

[英]Difference between mutex.timed_lock(duration) and boost::timed_mutex::scoped_lock scoped_lock(mutex, duration)

我想知道兩者之間的區別:

boost::timed_mutex _mutex;
if(_mutex.timed_lock(boost::get_system_time() + boost::posix_time::milliseconds(10))){
   exclusive code
   _mutex.unlock();
}

boost::timed_mutex _mutex;
boost::timed_mutex::scoped_lock scoped_lock(_mutex, boost::get_system_time() + boost::posix_time::milliseconds(10));
if(scoped_lock.owns_lock()) {
   exclusive code
}

我確實已經知道scoped_lock使得不必要進行解鎖調用。 我的問題是指:

  1. 為什么在第一種情況下我們將timed_lock稱為互斥鎖的成員函數,而在第二種情況下,我們根據互斥鎖和持續時間構造了一個鎖。
  2. 哪一個更有效?
  3. 可以使用boost :: posix_time還是建議使用其他類型,例如計時或持續時間?
  4. 與上面指定的兩種方法相比,有一種更好的方法(更快)來嘗試獲得“ x”時間的鎖定?

我會盡力回答您的問題:

  1. 如您在本文檔中可以讀到的,鎖被用作互斥對象的鎖定狀態的RAII設備。 也就是說,鎖不擁有它們引用的互斥鎖。 他們只是擁有互斥鎖。 基本上,這意味着您在初始化互斥鎖時會獲取它的對應鎖,並在銷毀鎖對象時釋放互斥鎖。
    這就是為什么在第二個示例中您不必從互斥鎖調用timed_lock的原因,在初始化時scoped_lock會為您執行此操作。
  2. 我不知道第一個示例是否更有效,但是我確定第二個示例(RAII scoped_lock)更安全,它可以確保您不會忘記解鎖互斥鎖,更重要的是,它可以確保其他使用和修改您的代碼的人不會引起任何與互斥鎖有關的問題。
  3. 據我所知,您不能從posix_time構造scoped_lock(基本上是unique_lock<timed_mutex> )。 我個人更喜歡持續時間。
  4. 我認為,使用“持續時間”絕對時間構造鎖是您的最佳選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM