C++ 可升级读/写锁Win32
我正在寻找一个具有pthreads rwlock行为的win32可升级读写锁,其中读锁可以被提升和降级 我想要的是:C++ 可升级读/写锁Win32,c++,c,winapi,locking,pthreads,C++,C,Winapi,Locking,Pthreads,我正在寻找一个具有pthreads rwlock行为的win32可升级读写锁,其中读锁可以被提升和降级 我想要的是: pthread_rwlock_rdlock( &lock ); ...read... if( some condition ) { pthread_rwlock_wrlock( &lock ); ...write... pthread_rwlock_unlock( &lock ); } ...read... pthread_rwlo
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();
lock.rdlock();
阅读
如果(某些条件){
if(lock.tryupgrade()){
写
lock.unlock();
返回;
}否则{
lock.unlock();
//
lock.wrlock();
如果(某些条件){//so,则需要重新检查
写
}
lock.unlock();
返回;
}
}
阅读
lock.unlock();
编辑:赏金:
我仍在搜索中,但想添加一些限制:它只在进程内使用(因此基于关键部分是可以的,WIN32互斥不可以),并且应该是纯WIN32 API(没有MFC、ATL等)。获取读锁应该是快速的(因此,获取读锁不应该进入其快速路径中的关键部分)。也许可以使用基于InterlocatedIncrement的解决方案?pthread库是一个“可移植线程”库。这意味着它在windows上也受支持;)看一看:
另外,考虑使用替代锁:编译器扩展提供可移植的关键部分、KNES线程模型、任务以及更多!C++在Linux上支持这种技术以及G++。
干杯!:) boost
shared_mutex
类支持读(共享)锁和写(唯一)锁以及从共享锁到唯一锁的临时升级
我不建议您自己编写,这是一件棘手的事情,很难进行彻底的测试。事实上,pthread意味着POSIX线程。如果您下载了必要的服务,Windows可以兼容POSIX。您是对的,但它们通常被称为“便携式”,因为它们是:
boost::shared_mutex
的win32实现看起来很有希望。pthread实现不是很漂亮(它的功能超出了我的需要,因此他们使用的方法可能没有pthread_rwlock____)的非标准升级行为那么有效..)。我将尝试一下……好吧,它是完美的,在阅读文档并尝试之后,现在一切都变得有意义了:-)