假设我有 3 个线程:A、B 和 C。线程 B 是一个关键线程,需要尽可能快,而其他两个线程则不那么重要。出于性能原因,我也没有使用任何互斥量。
我在线程 A 中收到一个对象的更新。它是一个在堆上分配的对象。线程 A 通过将事件发布到线程 B 的事件队列来将此数据传输到线程 B。线程 B 将通过清除旧内存并将指针重置为新内存来更新其对象拷贝。现在涉及到第 3 个线程(线程 C),每当线程 A 收到更新时,它也需要此数据。
如果我尝试将此数据从线程 B 传输到线程 C,那么理论上,线程 B 可能会在线程 C 正在处理该内存块的同时清除旧内存(这将导致竞争条件) .如果线程 C 正在处理一组旧数据,那是可以的。我只是想防止竞争条件。那么在那种情况下,我是否应该让线程 A 创建 2 个数据拷贝(一个用于线程 B,一个用于线程 C)并向每个拷贝发布一个事件?我不想在线程 B 中创建拷贝,因为该线程需要尽可能快。
最佳答案
我不是 100% 确定问题是什么。如果是关于内存管理(即何时释放内存),只需使用 shared_ptr(C++11 或 boost)。然后最后一个摆脱指针的线程将释放内存。
此外,您声称您没有任何互斥量,但您正在使用事件队列。该事件队列中有一个互斥锁。如果它对您来说足够快,很可能在正确位置的互斥量也能。
关于C++ - 将数据复制到 2 个不同线程的最快/可靠方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23074255/