【发布时间】:2019-03-20 16:40:35
【问题描述】:
我发现互联网上的许多读写自旋锁实现都不必要地复杂。我用c++写了一个简单的读写锁。
如果我遗漏了什么,谁能告诉我?
int r = 0;
int w = 0;
read_lock(void)
{
atomic_inc(r); //increment value atomically
while( w != 0);
}
read_unlock(void)
{
atomic_dec(r); // Decrement value atomically
}
write_lock(void)
{
while( (r != 0) &&
( w != 0))
atomic_inc(w); //increment value atomically
}
write_unlock(void)
{
atomic_dec(w); //Decrement value atomically
}
用法如下。
read_lock()
// Critical Section
read_unlock();
write_lock()
// Critical Section
write_unlock();
编辑:
感谢您的回答。 我现在将答案更改为原子等价物
【问题讨论】:
-
它不是有效的 C++,而且它似乎假设像
w++这样的东西是原子的。 -
您的计数器没有同步。这不是线程安全的。
-
感谢您的链接。我会通过链接
-
目前不是有效的 C++(函数没有返回类型)。但更糟糕的是,它不是惯用的 C++。这些是必须成对发生才能工作的 C 函数调用。有一个模式。此代码也不是异常安全的。除了有问题的和未定义的
atomic_*()函数之外,write_lock()中似乎还有一个错误
标签: c++ concurrency locking readwritelock