C++ 使用AcquireSRWLock的安全线程映射/哈希表
我使用AcquireSRWLockShared和AcquireSRWLockExclusive Windows API为非线程安全映射提供了一个瘦包装器。本质上,与查找相关的方法采用读锁,而与“set”相关的方法采用写锁——非常简单,直截了当 问题是:我正在重构旧代码,其中一个要求是调用方需要能够在“收集级别”锁定此映射,然后对其进行不同的调用——可以说是“在一个事务下” 问题是,如果我要获取一个写锁并保持它,那么如果我要进行查找——查找方法试图获取一个读锁,它将失败或阻塞。看起来我把两种不同的方法塞进了一个篮筐,但这一切都没有发生C++ 使用AcquireSRWLock的安全线程映射/哈希表,c++,multithreading,visual-c++,readerwriterlockslim,readerwriterlock,C++,Multithreading,Visual C++,Readerwriterlockslim,Readerwriterlock,我使用AcquireSRWLockShared和AcquireSRWLockExclusive Windows API为非线程安全映射提供了一个瘦包装器。本质上,与查找相关的方法采用读锁,而与“set”相关的方法采用写锁——非常简单,直截了当 问题是:我正在重构旧代码,其中一个要求是调用方需要能够在“收集级别”锁定此映射,然后对其进行不同的调用——可以说是“在一个事务下” 问题是,如果我要获取一个写锁并保持它,那么如果我要进行查找——查找方法试图获取一个读锁,它将失败或阻塞。看起来我把两种不同的
我能想到的唯一解决办法是,我应该使用一个简单的临界区,它不区分读者和作者——同一个线程可以多次进入同一临界区。那会很糟糕,因为我真的很想获得单写器/多读器的性能。有什么想法吗?是的,你需要一个互斥器。当您承诺需要“交易”时,列车离开了车站。也许你只需要另一个集合,你将与现有的一个集合合并,从这个问题很难判断这是否有效。我正在尝试改进已有20年历史的代码库--使用我得到的