DoubleBuffer是一种以空间换取并发安全的数据结构。
DoubleBuffer.h
头文件内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#pragma once
#include <stdint.h>
template<typename T>
class DoubleBuffer
{
T _buffer[2];
uint8_t index;
public:
DoubleBuffer() : index(0) { }
DoubleBuffer(T const &data) : index(0) { _buffer[index] = data; }
T const &get() const { return _buffer[index]; }
T &get() { return _buffer[index]; }
T const *operator->() const { return &get(); }
T *operator->() { return &get(); }
T const &buffer() const { return _buffer[!index]; }
T &buffer() { return _buffer[!index]; }
void commit() { index ^= 1; }
};
|
一般commit方法中使用异或即可(对应xorb汇编指令),也可以使用C++11的atomic操作。