【发布时间】:2011-09-08 20:25:25
【问题描述】:
我知道多线程编程应该很难。但似乎事情找到了一种奇怪的破坏方式。例如,我有多个线程同时更改控制台的颜色和写入控制台(它是一个错误日志)。
有两个问题:
- 乱码
- 颜色变化干扰/不在正确的时间
当我向更改控制台颜色并写入控制台的部分添加互斥锁时,它有助于处理混乱的文本(自互斥锁以来没有看到任何内容),但控制台颜色仍然错误。
所以看起来一个互斥锁是不够的!我现在想我需要一个队列,以及一个等待该队列并在其中有东西时将其刷新的线程。所以我的问题是,你如何判断互斥锁何时足够?一旦涉及另一个进程的管道/文件/通信?
【问题讨论】:
-
你对问题的描述真的很难说什么。锁通常就足够了,因为它们隔离了进行原子修改的事务。
-
读取为您有两个互斥锁或错误地组合颜色变化并写入一个锁定操作。
-
听起来你的函数改变了全局状态(控制台颜色),然后假设全局状态即使在释放互斥锁后仍然有效。
-
你能分离出改变颜色的相关代码并创建一个更简单的程序来显示错误吗?
-
如果使用得当,互斥体就足够了。安德烈的建议很好。
标签: c++ multithreading