在双缓冲多线程系统中执行指针交换

Dea*_*dMG 6 c++ multithreading doublebuffered

当双缓冲由于在线程之间共享的数据时,我使用了一个系统,其中一个线程从一个缓冲区读取,一个线程从另一个缓冲区读取并从第一个缓冲区读取.麻烦的是,我将如何实现指针交换?我需要使用关键部分吗?没有可用的互锁功能实际交换值.我不能从缓冲区1读取一个线程,然后从缓冲区2开始读取,在读取过程中,这将是appcrash,即使其他线程没有开始写入它.

我在Visual Studio Ultimate 2010 RC中使用Windows上的本机C++.

Bli*_*ndy 6

使用关键部分是可接受的方式.只需CRITICAL_SECTION在所有线程之间共享一个对象,EnterCriticalSectionLeaveCriticalSection在指针操作/缓冲区读/写代码周围调用该对象.尝试尽快完成关键部分,尽可能多地将代码留在关键部分之外.

即使您使用双重互锁交换技巧,您仍然需要一个关键部分或某些东西来同步您的线程,因此也可以将它用于此目的.

  • 访问数据时不保留它,只交换数据. (2认同)

Joh*_*ler 1

为什么不能使用InterlockedExchangePointer

编辑:好的,我明白你现在所说的,IEP 实际上并没有互相交换 2 个实时指针,因为它只通过引用获取单个值。