同步访问几乎相同的向量

时间:2013-10-23 09:39:04

标签: c++ multithreading vector

情境: 我有两个几乎相同的向量。它们像双缓冲区一样运行,为单个写入器和多个读取器提供服务。一个线程组将读取一个向量,另一个向量将由单个线程写入。在编写器线程完成更新后,它将swap()两个向量。通过这种方式,读者可以在作者准备下一个frame时继续阅读,而作者可以继续写作而不必担心读者。

问题: 如果在执行swap期间保证两个向量的大小相同,那么在进行交换时不使用任何锁定机制是否安全?如果不是,那么在写作者线程上没有太多开销的情况下确保swap是安全的最终方式是什么?

1 个答案:

答案 0 :(得分:1)

这不安全。考虑即使交换两个值也不是一个安全的操作。您需要使用互斥锁进行此操作。希望交换是一个成本相对较低的操作(即使你的向量长度不同),所以保护交换应该没问题。

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