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);
}