【问题标题】:Is a mutex always held by a thread?互斥锁总是由线程持有吗?
【发布时间】:2018-10-28 17:54:08
【问题描述】:

如果该线程想要访问临界区,则该线程获取互斥锁。

但是在线程尝试访问该区域之前,互斥锁(如果之前从未使用过)是“空闲的”还是始终由线程持有?

【问题讨论】:

  • 没有什么能阻止你构建一个以“锁定”状态开始的互斥锁,它只是没有意义,因为互斥锁已经是一个非常专业的同步对象。例如,信号量可以在“锁定”状态下启动,实际上这很常见。

标签: c multithreading mutex


【解决方案1】:

互斥锁可以是“免费的”(即解锁)。线程只能锁定(获取)未锁定的互斥体。

此外,pthread mutex 可以创建为具有静态存储持续时间的全局变量,使用PTHREAD_MUTEX_INITIALIZE 进行初始化 - 这种互斥对象实际上是在“编译时”当然没有线程可以从那里固定它......

【讨论】:

  • 感谢您抽出宝贵时间向我解释。非常感谢您的帮助。
【解决方案2】:

如果没有线程锁定互斥体,默认情况下是这样,用你的话来说,互斥体可以认为是“免费的”。

所以要回答您的问题,不,互斥锁并不总是必须持有。并且在创建时不会有线程持有它。

【讨论】:

  • 感谢您的解释。非常感谢您的帮助。
猜你喜欢
  • 2013-01-31
  • 2023-03-19
  • 2011-07-24
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多