我想用c ++锁定一个内存区域。
我有一个循环的内存缓冲区。生产者线程写入缓冲区,消费者线程从缓冲区读取。如果两个进程访问重叠的内存区域,则只需要进行同步。
我可以使用c ++标准库(或任何类似的库)中的类来构建内存区域的锁吗?
如果没有,那么采取什么好方法呢?
答案 0 :(得分:1)
如果性能有问题,我不会考虑std :: mutex / std :: condition_variable。这是我能想到的最好的:
Singleton有2名成员。
std::atomic<__uint128_t> write_range, read_range;
然后将它们用于写入范围1000到1999并读取范围500到1499,如下所示:
singleton::instance()->write_range = (__uint128_t) 1999 << 64 | 1000;
singleton::instance()->read_range = (__uint128_t) 1499 << 64 | 500;
这应该是没有锁定的最有效的设置/比较方式。发现冲突:
bool clash(std::atomic<__uint128_t> const& w, std::atomic<__uint128_t> const& r) {
return w >> 64 > r >> 64 && ((size_t)w <= (size_t)(r >> 64)) ;
}