【发布时间】:2010-12-23 06:04:31
【问题描述】:
我正在寻找具有 pthreads rwlock 行为的 win32 可升级读写锁,其中可以升级和降级读取锁。
我想要什么:
pthread_rwlock_rdlock( &lock );
...read...
if( some condition ) {
pthread_rwlock_wrlock( &lock );
...write...
pthread_rwlock_unlock( &lock );
}
...read...
pthread_rwlock_unlock( &lock );
posix 不需要升级行为,但它适用于 mac 上的 linux。
目前,我有一个可升级的工作实现(基于事件、信号量和临界区),但当阅读器处于活动状态时升级可能会失败。如果失败,则需要读取解锁 + 重新检查 + 写入锁定。
我有什么:
lock.rdlock();
...read...
if( some condition ) {
if( lock.tryupgrade() ) {
...write...
lock.unlock();
return;
} else {
lock.unlock();
// <- here, other threads may alter the condition ->
lock.wrlock();
if( some condition ) { // so, re-check required
...write...
}
lock.unlock();
return;
}
}
...read...
lock.unlock();
编辑:赏金:
我还在寻找中,但想补充一些限制:它只用于进程内(所以基于临界区可以,WIN32互斥体不行),它应该是纯WIN32 API(没有MFC 、ATL 等)。获取读锁应该很快(因此,获取读锁不应该进入其快速路径中的关键部分)。也许基于 InterlockedIncrement 的解决方案是可能的?
【问题讨论】:
标签: c++ c winapi locking pthreads