0

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

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

4

1 回答 1

1

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

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

于 2013-10-23T09:55:37.417 回答