【发布时间】:2018-10-28 17:54:08
【问题描述】:
如果该线程想要访问临界区,则该线程获取互斥锁。
但是在线程尝试访问该区域之前,互斥锁(如果之前从未使用过)是“空闲的”还是始终由线程持有?
【问题讨论】:
-
没有什么能阻止你构建一个以“锁定”状态开始的互斥锁,它只是没有意义,因为互斥锁已经是一个非常专业的同步对象。例如,信号量可以在“锁定”状态下启动,实际上这很常见。
标签: c multithreading mutex
如果该线程想要访问临界区,则该线程获取互斥锁。
但是在线程尝试访问该区域之前,互斥锁(如果之前从未使用过)是“空闲的”还是始终由线程持有?
【问题讨论】:
标签: c multithreading mutex
互斥锁可以是“免费的”(即解锁)。线程只能锁定(获取)未锁定的互斥体。
此外,pthread mutex 可以创建为具有静态存储持续时间的全局变量,使用PTHREAD_MUTEX_INITIALIZE 进行初始化 - 这种互斥对象实际上是在“编译时”当然没有线程可以从那里固定它......
【讨论】:
如果没有线程锁定互斥体,默认情况下是这样,用你的话来说,互斥体可以认为是“免费的”。
所以要回答您的问题,不,互斥锁并不总是必须持有。并且在创建时不会有线程持有它。
【讨论】: