簡體   English   中英

在互斥鎖上使用多個 std::unique_lock,FIFO 中的所有線程等待進程?

[英]Use multiple std::unique_lock on mutex, all threads in FIFO to wait process?

當我有三個或更多線程時,如果互斥鎖在一個線程中解鎖,下一個將處理哪個? 他們在先進先出規則? 如果不是FIFO,幾個線程等待unlock(),會不會有一個線程從不處理? 他們是否在排序的隊列中等待,排序的規則是什么?

示例代碼:

//thread No.1
func1(){
  std::unique_lock<mutex> lock(_mtx);
  //do something, now in here,and will leave this thread then mutex will unlock
}

//thread No.2
func2(){
  std::unique_lock<mutex> lock(_mtx);
  //do something
}

//thread No.3
func3(){
  std::unique_lock<mutex> lock(_mtx);
  //do something
}

操作系統將決定哪個線程獲得互斥量最有效。 您有責任確保任何被調度的線程都能按照您的需要工作。

通常,線程不可能長時間拒絕互斥鎖,因為最終所有其他線程將阻塞或耗盡它們的時間片,從而允許該線程獲取互斥鎖。 但該平台不提供任何特別的公平保證。

你不會想要先進先出。 那將是一場徹頭徹尾的災難。 想象一下,如果每個線程需要獲取鎖 100 次。 現在一個線程獲取鎖,釋放它,然后幾乎立即嘗試獲取鎖。 您是否希望它每次都停止並切換到其他線程之一? 你想要 300 次上下文切換和啟動/停止嗎? 你絕對不會。

暫無
暫無

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

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