我使用AcquireSRWLockShared和AcquireSRWLockExclusive Windows API为非线程安全映射提供了一个瘦包装器。本质上,查找相关的方法正在采用读锁定,而“set”相关方法正在采用写锁定 - 简单,直接。
以下是皱纹:我正在重构旧代码,其中一个要求是调用者需要能够在“集合级别”锁定此映射,然后对其进行不同的调用 - 所有“在一个事务下” “可以这么说。
问题是,如果我要使用Write锁并保持它,那么如果我要进行查找 - Lookup方法正在尝试进行读取锁定,该锁定将失败或阻塞。看起来我正在将两种不同的方法塞进一个篮子中而且它没有发生。
我能想到的唯一解决方法是我应该使用一个普通的关键部分,它不区分读者和编写者 - 同一个线程可以多次进入同一个关键部分。这很糟糕,因为我真的想要获得单一作家/多个读者的表现。有什么想法吗?