假设我有3个线程:A,B和C.线程B是一个关键线程,需要尽可能快,而其他两个线程不是同样重要。由于性能原因,我也不使用任何互斥锁。C++ - 将数据复制到2个不同线程的最快/可靠方法
我收到线程A中对象的更新。它是一个在堆上分配的对象。线程A通过将事件发布到线程B的事件队列将此数据传输到线程B.线程B将通过清除旧内存并将指针重置为新内存来更新其对象的副本。现在有一个第三个线程(线程C),每当线程A收到更新时也需要这个数据。
如果我试图将这些数据从线程B转移到线程C,那么在理论上,线程B可能会在线程C正在处理该块内存的同时清除旧内存(这会导致竞争条件)。如果线程C正在处理一组旧数据,那么就可以了。我只是想防止比赛条件。所以在这种情况下,我应该让线程A创建2个数据副本(一个用于线程B,另一个用于线程C)并将事件发布给它们中的每一个?我不想在线程B中创建副本,因为该线程需要尽可能快。
这一切都取决于你的线程实现。你在用什么(例如:pthreads,MPI,OpenMP)? – Cramer
为什么要复制?也许你应该以另一种方式思考。 – EJP
此外,在很多情况下,互斥/同步是必需的,它们不是一个选项。没有它们,线程B可能会看到队列中有一个新事件,但是该事件在内存中的其他位置分配,这不一定是同步的,因此可能包含任何旧垃圾! – Cramer