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

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

最佳答案

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

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

关于c++ - 同步访问几乎相同的 vector ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19538130/

10-17 02:48