如何跨两个线程传递数据而不会阻塞?

时间:2019-09-01 19:16:45

标签: c++ multithreading asynchronous boost concurrency

我有两个线程:一个写线程和一个读线程。 writer线程在周期性循环中运行(我使用Boost的boost::asio::steady_timerboost::asio::io_context创建了周期性循环)。在每个期间,作者都会生成新的data,可供阅读。阅读器线程可能会或可能不会定期运行。读取器线程每次运行时,都希望从写入器线程中读取最新的data。它不需要读取所有由writer线程生成的data,只需读取最新的boost::mutex

我考虑过使用data中的互斥锁来锁定data,以允许两个线程同时访问data。但是,如果读取器花费太长时间来读取data,则写入器线程可能会在互斥体上阻塞太长时间,并违反其循环时间。

是否有一种方法可以使写入线程始终能够写入共享缓冲区,用最新的data替换旧的/POC/DEV/STRING/MATCH,而不管读取器是否实际读取;同时还允许读取器线程始终从缓冲区读取最新的grep

0 个答案:

没有答案