我想在 C++ 中锁定一个内存区域。
我有一个循环内存缓冲区。生产者线程写入缓冲区,消费者线程从缓冲区读取。这两个进程仅在访问重叠的内存区域时才需要同步。
C++ 标准库(或与此相关的任何库)中是否有一个类可用于在内存区域上建立锁?
如果不是,这里采用什么好方法?
最佳答案
如果性能是个问题,我不会考虑 std::mutex/std::condition_variable。这是我能想到的最好的:
有 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)) ;
}
关于c++ - C++ 中的范围锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49930814/