我有两个线程:一个写线程和一个读线程。 writer线程在周期性循环中运行(我使用Boost的boost::asio::steady_timer
和boost::asio::io_context
创建了周期性循环)。在每个期间,作者都会生成新的data
,可供阅读。阅读器线程可能会或可能不会定期运行。读取器线程每次运行时,都希望从写入器线程中读取最新的data
。它不需要读取所有由writer线程生成的data
,只需读取最新的boost::mutex
。
我考虑过使用data
中的互斥锁来锁定data
,以允许两个线程同时访问data
。但是,如果读取器花费太长时间来读取data
,则写入器线程可能会在互斥体上阻塞太长时间,并违反其循环时间。
是否有一种方法可以使写入线程始终能够写入共享缓冲区,用最新的data
替换旧的/POC/DEV/STRING/MATCH
,而不管读取器是否实际读取;同时还允许读取器线程始终从缓冲区读取最新的grep
?