同步对几乎相同的向量的访问

synchronizing access to almost identical vectors

本文关键字:向量 访问 同步      更新时间:2023-10-16

场景:我有两个几乎相同的向量。它们的功能类似于双缓冲区,为单个写入器和多个读取器提供服务。一个向量将由线程组读取,另一个向量将由单个线程写入。编写器线程完成更新后,它将swap()两个向量。这样,读者可以在作家准备下一frame时继续阅读,作者可以继续写作而不必担心读者。

问题:如果在执行swap期间两个向量的大小保证相同,那么在进行交换时不使用任何锁定机制是否安全?如果不是,那么确保swap安全而不会在编写器线程上产生太多开销的死亡方法是什么?

这不安全。请注意,即使交换两个值也不是安全的操作。您需要使用互斥锁进行此操作。希望交换是一种成本相对较低的操作(即使您的向量长度不同),因此保护交换应该是可以的。

请记住,交换会使对矢量内容的任何引用无效,这可能会影响读者的设计。