【问题标题】:Mutex between reads and writes读和写之间的互斥
【发布时间】:2011-03-17 05:22:51
【问题描述】:

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

我不知道用 Createmutex、openmutex、waitforsingleobject 和 releasemutex api 来做这件事。

【问题讨论】:

  • 如果你想在 Windows 中使用进程内锁,你应该使用临界区而不是互斥锁。但无论如何你都想要一个读写器锁!

标签: c windows multithreading winapi mutex


【解决方案1】:

您正在寻找的是Reader-Writer lock。网上有一些实现,比如this one

【讨论】:

  • 一个警告:读写锁不能公平。您还应该仔细查看读写锁包 - 如果它允许将共享锁转换为排他锁,则应该避免它 - 没有办法实现 shared->exclusive 而不引入死锁的可能性。如果包作者留在共享->独占 API 中,则意味着他们真的没有考虑读写器锁中固有的同步问题。
【解决方案2】:

看看下面的链接,看看这个原生的windows api是否满足你的要求:

Slim Reader/Writer (SRW) Locks

【讨论】:

    【解决方案3】:

    如果您的同步/关键部分问题仅限于单个进程和多个线程,我建议您使用Critical Section Objects 而不是Mutex Objects。您在从 msdn 链接的页面上有几个示例。阅读链接的 msdn 页面,如果您掌握了基本的并发同步概念和所需的 Windows Api 知识,如果不阅读,您应该很快就会开始学习。从 api 的角度来看,互斥锁和临界区没有什么特别之处。

    【讨论】:

      猜你喜欢
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 2022-12-22
      • 1970-01-01
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多