读写互斥锁

3

我正在使用互斥量来保护关键部分。我有一个设计约束条件: 1)如果两个读操作发生在两个不同的线程中,则关键部分应该对两者都可用。 2)如果有写操作正在进行,则其他线程上的读取应该被阻止 3)如果有读操作正在进行,则其他线程上的写入应该被阻止。

我不知道如何使用Createmutex、openmutex、waitforsingleobject和releasemutex API实现这一点。


如果您想在Windows中使用进程内锁,则应该使用临界区而不是互斥量。但是无论如何,您都需要一个读写锁! - David Heffernan
3个回答

4
你需要的是读写锁。有一些互联网上的实现,例如这个

4
注意:读写锁不能保证公平性。您还应该仔细查看读写锁包 - 如果它允许将共享锁转换为独占锁,则应避免使用 - 没有实现共享->独占而不引入死锁的方法。如果包作者留下了一个共享->独占的API,那么这意味着他们真的没有考虑过读写锁固有的同步问题。 - Larry Osterman

0

0

如果您的同步/临界区问题仅限于单个进程和多个线程,我建议您使用临界区对象而不是互斥对象。您可以在从msdn链接的页面上找到一些示例。阅读链接的msdn页面,如果您已经掌握了基本的并发同步概念和所需的Windows Api知识,那么您应该很快就能解决问题,否则请继续学习。从api的角度来看,互斥体和临界区没有什么特别之处。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接