当互斥锁不够时?

时间:2011-06-05 18:28:46

标签: c++ multithreading

我知道多线程编程应该很难。但似乎事情发现了一种奇怪的打破方式。例如,我有多个线程都改变了控制台的颜色和写入控制台(它的错误日志)。

有两个问题:

  • 扰乱文字
  • 颜色变化干扰/不在适当的时间

当我在更改控制台颜色并写入控制台的部分添加了一个互斥锁时,它有助于处理干扰文本(自互斥锁后没有看到任何内容)但是控制台颜色仍然是错误的。

所以看来互联网还不够!我现在想我将需要一个队列,以及一个等待该队列的线程,并在其中有内容时将其刷新。所以我的问题是,你如何衡量互斥锁是否足够?一旦涉及另一个进程管道/文件/通信?

1 个答案:

答案 0 :(得分:0)

互斥(例如boost / pthread互斥锁)将保证对不同线程之间的共享资源的独占访问(但不是进程,您需要一个命名信号量)。

听起来您的共享资源是对终端的访问权限。仅仅因为你在更改颜色时将其锁定,并不意味着当你决定改变颜色时它会被锁定。两个线程都会在写入终端或更改颜色之前锁定互斥锁。由于您仍在保护单个共享资源(终端),因此制作两个互斥锁并不是必需的。

如果线程想要写入文本并更改颜色,则互斥锁必须支持递归锁定,例如recursive_mutex