【问题标题】:How to understand multi-threading and mutual exclusion primitives如何理解多线程和互斥原语
【发布时间】:2016-10-14 17:53:44
【问题描述】:

我目前正在学习多线程和互斥结构的使用,例如锁、信号量和条件变量。

什么时候是使用这 3 种互斥的最佳时机,有没有使用这些结构的真实例子?

任何提示都会有所帮助。 提前谢谢你。

【问题讨论】:

  • 你的问题太宽泛了。您最好阅读教科书或阅读这些原语的维基百科,以了解何时需要/合适。
  • 我最喜欢的pthreads 教程。即使您不使用pthreads,这些概念也是相同的:computing.llnl.gov/tutorials/pthreads

标签: c multithreading operating-system locking semaphore


【解决方案1】:

基本上,它们具有不同程度的复杂性和性能。首先,我指出所有这些锁定方法都存在变体,我必须对您所指的变体做出假设。

  1. 锁管理器往往是最复杂的。一个体面的锁管理器能够检测和打破死锁。锁管理器通常用于同步数据库访问。锁管理器功能有很多变化。

  2. 信号量也有许多变体。它们可以设置为处理单次访问、多次访问、单次/多次访问(例如,1 个写入器或多个读取器)。开销水平远低于锁管理器。但是,应用程序必须自己处理死锁。

  3. 条件变量往往是最简单的锁定方法。它们总是依赖于为锁定而设计的硬件指令,例如测试和设置互锁指令。这通常用于用于内核资源的自旋锁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 2023-02-06
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    相关资源
    最近更新 更多