【发布时间】:2016-02-22 16:13:38
【问题描述】:
我有一个函数pushMessage()。
void pushMessage(const char* msg, const int len)
{
for (int i=0;i<len;++i)
queue.push(*(msg+i))
}
有问题的队列是 tbb::concurrent_bounded_queue<char> 并且具有非常大的大小(假设无限)。
这个函数被两个线程调用。一个线程不断调用该函数,另一个线程偶尔调用一次。
确保队列的内容没有混合并发msg 的最有效方法是什么?我的第一个电话是使用互斥锁,但是我想听更多,因为我对并发世界还很陌生,而且我不想直接跳到我学到的第一件事上。非常感谢。
附: - 我可以访问 Boost 和 TBB 库。
编辑:队列是 char 类型,因为它用于逐字节发送消息以提高速度。以前的实现是一次发送全部消息。
【问题讨论】:
-
这是读写器问题还是写器问题?
-
作家兼作家。两个线程都写入队列。
-
你所说的“为了速度”是什么意思???在这个实现中它会更慢。
-
更改后,是的,它会变慢。但我正在使用现有代码,以前从未发生过上述问题。我目前无法修改这个机制,因为很多都依赖于这个现有的实现。
标签: c++ multithreading concurrency tbb