我刚刚在 C 中实现了一个读写器锁。我想限制读者的数量,所以我使用 'num' 来计算它。我不确定这个实现是否有一些潜在的数据竞争或死锁条件。那么你能帮我弄清楚它们吗?
另一个问题是我可以以某种方式删除 struct _rwlock 中的“spin_lock”吗?谢谢!
#define MAX_READER 16;
typedef _rwlock *rwlock;
struct _rwlock{
spin_lock lk;
unint32_t num;
};
void wr_lock(rwlock lock){
while (1){
if (lock->num > 0) continue;
lock(lock->lk);
lock->num += MAX_READER;
return;
}
}
void wr_unlock(rwlock lock){
lock->num -= MAX_READER;
unlock(lock->lk);
}
void rd_lock(rwlock lock){
while (1){
if (lock->num >= MAX_READER) continue;
atom_inc(num);
return;
}
}
void rd_unlock(rwlock lock){
atom_dec(num);
}