У меня есть функция pushMessage()
.Эффективность параллелизма в C++
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
? Мой первый звонок состоял в использовании мьютекса, однако я хотел бы услышать больше, потому что я довольно новичок в мире параллелизма, и я бы предпочел не просто перейти к первому, чему я научусь. Очень признателен.
P.S. - У меня есть доступ к библиотекам Boost и TBB.
EDIT: Очередь имеет тип char, поскольку она используется для отправки сообщений побайтно, для скорости. В предыдущей реализации было отправлено все сообщения за раз.
Является ли это проблемой писателя-писателя или проблемой писателя-писателя? – DumbCoder
Писатель-писатель. Оба потока записываются в очередь. –
Что значит «для скорости» ??? В этой реализации это будет ** медленнее **. – SergeyA