双缓冲区方案
- 双缓冲方案分配两段缓冲区:读(当前)缓冲和写(下一)缓冲。当执行查询操作时,总是读取当前缓冲区;当执行写操作时,总是在下一缓冲区上操作。当写操作执行完成后,交换操作会立刻将当前缓冲区和下一缓冲区交换,这样,最近更新的缓冲区便可供查询使用,旧的查询缓冲区用于写操作。
- 示例代码:
template <typename T>
class DoubleBuffer {
public:
DoubleBuffer():flag(false){
}
T* write() {
return flag ? &buffer1 : &buffer2;
}
T* read() {
return flag ? &buffer2 : &buffer1;
}
void swap() {
flag = !flag;
}
private:
bool flag;
T buffer1;
T buffer2;
}