簡體   English   中英

如果在調用pthread_mutex_lock()時線程未成功執行該怎么辦?

[英]What happens if a thread doesn't succeed when making a pthread_mutex_lock() call?

我正在做一個實驗,我認為這是可以保證的死鎖情況:

void *thread_1(void *vptr)
{
    pthread_mutex_lock(&a);
    sleep(1);
    pthread_mutex_lock(&b);
    pthread_mutex_unlock(&b);
    pthread_mutex_unlock(&a);
}

void *thread_2(void *vptr)
{
    pthread_mutex_lock(&b);
    sleep(1);
    pthread_mutex_lock(&a);
    pthread_mutex_unlock(&a);
    pthread_mutex_unlock(&b);
}

如果線程無法鎖定怎么辦? 它是否進入隊列,等待互斥,還是只是繼續執行下一條指令?

在您的情況下,兩個線程將永遠掛起,等待互斥。 如果您同時啟動兩個線程。

為什么不創建互斥對象和線程,然后運行示例?

如果一個線程試圖鎖定已被另一個線程鎖定的互斥鎖,它將被掛起。 在這種情況下,只有獲得了鎖,它的執行才會繼續。 (盡管沒有“隊列”-只是一組無序的等待線程。 任何等待線程都可以成為下一個獲取互斥鎖的線程)。

如果線程試圖鎖定已被自身鎖定或未正確初始化的互斥鎖,則pthread_mutex_lock()可能返回非零錯誤代碼,並且執行將繼續進行 ,而不會獲取該互斥鎖。

這取決於它無法鎖定的原因。 例如,如果線程已持有鎖,則可能返回錯誤。 無論如何,您應該檢查返回值,並檢查手冊頁中errno中返回的錯誤代碼。 我的(linux)指出:

  The pthread_mutex_lock() function may fail if: EDEADLK The current thread already owns the mutex. 

暫無
暫無

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

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