0

我使用 AcquireSRWLockShared 和 AcquireSRWLockExclusive Windows API 围绕非线程安全映射提供了一个瘦包装器。本质上,与查找相关的方法正在使用读锁,而“设置”相关方法正在使用写锁——很简单,直截了当。

这是皱纹:我正在重构旧代码,其中一个要求是调用者需要能够在“集合级别”锁定此映射,然后对其进行不同的调用——所有这些都“在一个事务下”以便说话。

问题是,如果我要获取写锁并保持它,那么如果我要进行查找 - Lookup 方法正在尝试获取将失败或阻塞的读锁。好像我在一个篮子里塞进了 2 种不同的方法,但它只是没有发生。

我能想到的唯一解决方法是我应该使用一个不区分读者和作者的普通临界区——并且同一个线程可以多次进入同一个临界区。那会很糟糕,因为我真的很想获得单个作者/多个读者的性能。有任何想法吗?

4

0 回答 0