为什么我们需要semaphore、条件变量s 和其他构造。我得到一个线程被阻塞,直到一个信号比一个接受mutex lock的线程好,检查一个如果没有通过的条件,解锁并重试直到条件通过。
除此之外,还有没有其他好处。例如,我们可以只使用互斥锁来实现读写锁吗?如下所示:
int writers = 0;
int readers = 0;
mutex lock;
read_lock()
{
mutex_lock(&lock);
while(writers == 1)
{
mutex_unlock(&lock); // unlock
mutex_lock(&lock); // retry
}
readers++;
mutex_unlock(&lock);
}
read_unlock()
{
mutex_lock(&lock);
readers--;
mutex_unlock(&lock);
}
write_lock()
{
mutex_lock(&lock);
while(r>0 || w==1)
{
mutex_unlock(&lock); // unlock
mutex_lock(&lock); // retry
}
writers++;
mutex_unlock(&lock);
}
write_unlock()
{
mutex_lock(&lock);
writers--;
mutex_unlock(&lock);
}
1)上述实现是否可行?如果不是,为什么?
2)我可以说多线程中的所有事情都可以只使用互斥锁来完成吗?