【发布时间】:2015-05-11 00:41:05
【问题描述】:
我想我的问题很常见,但它让我发疯:
我有一个具有 5 个线程的多线程应用程序。其中 4 个线程完成它们的工作,例如网络通信和本地文件系统访问,然后将它们的输出全部写入这种形式的数据结构中:
struct Buffer {
std::vector<std::string> lines;
bool has_been_modified;
}
第 5 个线程将这些缓冲区/结构打印到屏幕上:
Buffer buf1, buf2, buf3, buf4;
...
if ( buf1.has_been_modified ||
buf2.has_been_modified ||
buf3.has_been_modified ||
buf4.has_been_modified )
{
redraw_screen_from_buffers();
}
如何防止缓冲区在被读取或写入时被覆盖?
我找不到合适的解决方案,尽管我认为这必须是一个安静的常见问题。
谢谢。
【问题讨论】:
-
使用mutexes
-
感谢您的回复。我在多线程方面不是很有经验。你能举个简短的例子吗?
-
您要求购买 POD 有什么特别的原因吗? (注意当前接受的答案没有描述 POD)
-
是的,我不想用 getter 和 setter 围绕我的
struct建立一个大类。还调用我的struct缓冲区对我来说似乎不是 100% 正确,所以我添加了 POD。
标签: c++ multithreading c++11