如何用信号量实现读写锁
方法1
semp.resource = MAX_RESOURCE;
read_lock(semp)
{
semp.dec(1);
}
~read_lock(semp)
{
semp.inc(1);
}
write_lock(semp)
{
semp.dec(MAX_RESOURCE);
}
~write_lock(semp)
{
semp.inc(MAX_RESOURCE);
}
这种实现有个问题, 写锁可能被饿死, 需要实现写优先.
方法2
struct rw_lock
{
mutex_semp.resource = 1;
res_semp.resource = MAX_RESOURCE;
};
read_lock(rw_lock)
{
spin_till(rw_lock.mutex_semp.resource > 0);
rw_lock.res_semp.dec(1);
}
~read_lock(rw_lock)
{
rw_lock.res_semp.inc(1);
}
write_lock(rw_lock)
{
spin_till(rw_lock.mutex_semp.resource > 0);
rw_lock.mutex_semp.dec(1);
rw_lock.res_semp.dec(MAX_RESOURCE);
}
~write_lock(rw_lock)
{
rw_lock.res_semp.inc(MAX_RESOURCE);
rw_lock.mutex_semp.inc(1);
}
需要测试~