【问题标题】:Order of mutex_lock return in CC 中 mutex_lock 返回的顺序
【发布时间】:2016-03-05 11:04:48
【问题描述】:

假设有 3 个线程 A、B 和 C。 还有一个互斥锁 X

A 在 X 上调用 pthread_mutex_lock。

B 在 X 上调用 pthread_mutex_lock。

*

C 在 X 上调用 pthread_mutex_lock。

A 在 X 上调用 pthread_mutex_unlock。

**

现在谁可以先使用共享资源? B 还是 C? 如果我尝试在 * 中使用 pthread_destroy_mutex 会发生什么?在**中?

【问题讨论】:

  • 'B 还是 C?' - 其中之一。作为设计师,确保订单无关紧要是您的工作。
  • POSIX 标准中回答了另一个问题:“尝试销毁锁定的互斥体会导致未定义的行为。”
  • @MartinJames 顺序无关紧要,但不重要的是要知道而不是按原样接受?
  • @Keddy1201 不,知道这并不重要。这样的知识怎么会有用?在实际软件中,锁定的顺序不太可能得到保证或可预测,因此解锁时发生的事情同样定义明确。如果您认为这很重要,那么您做错了什么。

标签: c linux mutex


【解决方案1】:

Who will now be able to use the shared resource first?

这取决于内核调度程序的实现。 Posix 这样说:

如果在 mutex 引用的 mutex 对象上有线程阻塞 当调用 pthread_mutex_unlock() 时,导致互斥锁变为 可用,调度策略应确定哪个线程应 获取互斥体。

And what happens if I try to use pthread_destroy_mutex in *? in **?

再次来自manual

尝试销毁锁定的互斥体会导致未定义的行为。

如果您对这些方面还有任何疑问,建议您查阅相关手册页。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2012-06-11
    相关资源
    最近更新 更多