簡體   English   中英

什么時候互斥鎖還不夠?

[英]When mutex lock isn't enough?

我知道多線程編程應該很難。 但似乎事情找到了一種奇怪的破壞方式。 例如,我有多個線程同時更改 colors 並寫入控制台(它是一個錯誤日志)。

有2個問題:

  • 亂碼
  • 顏色變化干擾/不在正確的時間

當我將互斥鎖添加到更改控制台顏色並寫入控制台的部分時,它有助於處理混亂的文本(自互斥鎖以來沒有看到任何內容),但控制台顏色仍然錯誤。

所以看起來一個互斥鎖是不夠的,我現在想我需要一個隊列。 和一個等待該隊列並在其中有東西時將其刷新出來的單個線程,所以我的問題是? 您如何判斷互斥鎖何時足夠? 一旦涉及另一個進程的管道/文件/通信?

互斥體(例如 boost/pthread 互斥體)將保證對不同線程之間的共享資源的獨占訪問(但不是進程,您需要一個命名信號量)。

聽起來您的共享資源正在訪問終端。 僅僅因為您在更改顏色時鎖定它,並不意味着當您決定更改顏色時它會被鎖定。 兩個線程都會在寫入終端或更改顏色之前鎖定互斥鎖。 制作兩個互斥鎖並不過分必要,因為您仍在保護單個共享資源(終端)。

如果線程既要寫入文本又要更改顏色,則互斥鎖必須支持遞歸鎖定,例如recursive_mutex

暫無
暫無

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

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