Doo*_*day 9 c c++ posix pthreads producer-consumer
我正在寻找一种方法来使用pthread rwlock结构和C++中的条件例程.
我有两个问题:
第一:如何可能,如果我们不能,为什么?
第二:为什么当前的POSIX pthread没有实现这种行为?
为了理解我的目的,我解释了我的用途:我有一个处理一个共享数组的生产者 - 消费者模型.消费者将在数组为空时cond_wait,但在读取某些元素时将使用rdlock.当添加(+信号)或从阵列中移除elems时,生产者将发生扭曲.
使用rdlock而不是mutex_lock的好处是提高性能:当使用mutex_lock时,几个读取器会阻塞,而使用rdlock时,几个读取器不会阻塞.
我假设"条件"是指"条件变量".他们是不同的东西.
不,在等待条件变量时不能使用rwlock.我不能回答"为什么",但这就是POSIX决定这样做的方式.也许只是为了让事情变得简单.
但是,通过在不使用POSIX rwlock的情况下仅使用互斥锁和2个条件变量来创建自己的rwlock类,您仍然可以获得所需的行为:
getReadLock():
lock(mutex)
while(array.empty())
wait(readersCondVar, mutex)
readers++;
unlock(mutex)
releaseReadLock():
lock(mutex)
if (--readers == 0)
broadcast(writerCondVar, mutex) // or signal, if only 1 producer
unlock(mutex)
readerThread:
forever() {
getReadLock()
read()
releaseReadLock()
}
getWriteLock():
lock(mutex)
while(readers) {
wait(writerCondVar, mutex)
}
releaseWriteLock():
broadcast(readersCondVar, mutex)
unlock(mutex)
writerThread():
forever() {
getWriteLock()
write()
releaseWriteLock()
}
Run Code Online (Sandbox Code Playgroud)
简单,做你想要的.