gpt4 book ai didi

c - 这个 rwlock 实现有什么问题吗?

转载 作者:太空宇宙 更新时间:2023-11-04 01:37:00 24 4
gpt4 key购买 nike

我刚刚用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);
}

最佳答案

简短回答:是的,这里存在严重问题。我不知道您使用的是什么同步库,但您没有保护对共享数据的访问,并且您将在 rd_lock() 和 wr_lock() 的循环中浪费大量 CPU 周期。几乎在所有情况下都应避免使用自旋锁(但也有异常(exception))。

关于c - 这个 rwlock 实现有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12771816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com