读写之间的互斥

问题描述:

我正在为临界区使用互斥锁。我有一个设计约束, 1)如果2个读取发生在2个不同的线程中,那么关键部分应该可用于两者。 2)如果发生写操作,则应该阻止在其他线程上读取 3)如果发生了读操作,则应该阻塞在其他线程上写操作。读写之间的互斥

我不知道这样做与Createmutex,openmutex,waitforsingleobject和releasemutex apis。

+0

如果你想在Windows中进行内部进程锁定,你应该使用临界区而不是互斥锁。但是无论如何你都想要一个读写器锁! – 2011-03-17 09:14:32

你在找什么是Reader-Writer lock。它在互联网上有一些实现,例如this one

+4

一个警告:读写器锁*不能公平。您还应该仔细查看读写器锁定包 - 如果它允许将共享锁转换为排它锁,则应该避免它 - 如果不引入死锁的可能性,则无法实现shared-> exclusive。如果软件包作者留在共享 - >独占API中,这意味着他们真的没有考虑读写器锁定中固有的同步问题。 – 2011-03-17 05:36:09

看看下面的链接查看此本机的Windows API是否符合您的要求:

Slim Reader/Writer (SRW) Locks

如果您的同步/关键部分问题仅限于单个进程和许多线程,我建议您使用Critical Section Objects而不是Mutex Objects。你从msdn链接的页面上有几个例子。阅读链接的msdn页面,如果你有基本的并发同步概念和所需的Windows Api知识,那么你应该立即滚动,如果没有阅读。从api的角度来看,没有什么特别的关于Mutexes和Critical Sections的东西。