gpt4 book ai didi

c++ - 可升级的读/写锁 Win32

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:13:52 24 4
gpt4 key购买 nike

我正在寻找具有 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 不需要升级行为,但它适用于 linux on mac。

目前,我有一个可升级的工作实现(基于一个事件、一个信号量和一个关键部分),但是当读者处于事件状态时升级可能会失败。如果失败,则需要读取解锁 + 重新检查 + 写入锁定。

我有什么:

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 的解决方案是可能的?

最佳答案

boost shared_mutex 类支持读取器(共享)和写入器(唯一)锁以及从共享锁到唯一锁的临时升级。

Example for boost shared_mutex (multiple reads/one write)?

我不建议自己编写,这是一件很难做到正确且难以彻底测试的事情。

关于c++ - 可升级的读/写锁 Win32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1847032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com