Mutex的lock(), unlock(), tryLock()函數介紹

來源:互聯網
上載者:User

lock函數和tryLock函數都是用於鎖定對象,但他們之間有一定的區別:

lock函數是阻塞的,因為它調用WaitForSingleObject函數時傳遞的第二個參數是INFINITE,表示無限等待下去,所以是阻塞的。

tryLock函數時非阻塞的,調用後立即返回。因為它調用WaitForSingleObject函數時傳遞的第二個參數是0,表示不等待,立即返回。

調用lock或者tryLock後,都需要調用unlock來解鎖。

status_t Mutex::lock(){    DWORD dwWaitResult;    dwWaitResult = WaitForSingleObject((HANDLE) mState, INFINITE);    return dwWaitResult != WAIT_OBJECT_0 ? -1 : NO_ERROR;}void Mutex::unlock(){    if (!ReleaseMutex((HANDLE) mState))        LOG(LOG_WARN, "thread", "WARNING: bad result from unlocking mutex\n");}status_t Mutex::tryLock(){    DWORD dwWaitResult;    dwWaitResult = WaitForSingleObject((HANDLE) mState, 0);    if (dwWaitResult != WAIT_OBJECT_0 && dwWaitResult != WAIT_TIMEOUT)        LOG(LOG_WARN, "thread", "WARNING: bad result from try-locking mutex\n");    return (dwWaitResult == WAIT_OBJECT_0) ? 0 : -1;}

WaitForSingleObject函數的用法如下:

DWORD WaitForSingleObject(
HANDLE hObject, //指明一個核心對象的控制代碼
DWORD dwMilliseconds); //等待時間
  該函數需要傳遞一個核心物件控點,該控制代碼標識一個核心對象,如果該核心對象處於未通知狀態,則該函數導致線程進入阻塞狀態;如果該核心對象處於已通知狀態,則該函數立即返回WAIT_OBJECT_0。第二個參數指明了需要等待的時間(毫秒),可以傳遞INFINITE指明要無限期等待下去,如果第二個參數為0,那麼函數就測試同步對象的狀態並立即返回。如果等待逾時,該函數返回WAIT_TIMEOUT。如果該函數失敗,返回WAIT_FAILED。

參考:WaitForSingleObject函數用法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.