You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用pthread_mutex_lock申请已上锁互斥量时何时返回值?

问题解答

pthread_mutex_lock() 仅在两种情况下会返回值:要么成功拿到目标互斥量的所有权,要么调用触发了错误,阻塞等待期间不会有任何返回。

你描述的场景执行流程完全符合pthread标准定义,逻辑如下:

  • 互斥量已经被第一个线程持有,处于锁定状态
  • 第二个线程调用pthread_mutex_lock()尝试加锁,此时函数不会返回,第二个线程直接进入阻塞状态,内核会将其暂时移出CPU调度队列,不占用运行资源
  • 直到第一个线程调用pthread_mutex_unlock()释放互斥量,内核会唤醒等待该互斥量的第二个线程,第二个线程成功拿到互斥量的所有权后,pthread_mutex_lock()才会返回0(成功状态码)
  • 若调用过程触发参数非法、死锁检测触发等异常,函数也会立即返回对应错误码,不会进入阻塞流程

调用pthread_mutex_lock()将锁定mutex指向的互斥量对象。若该互斥量已被锁定,调用线程将阻塞,直到互斥量变为可用状态。该操作返回时,mutex指向的互斥量对象处于锁定状态,且调用线程为其所有者。

官方描述里的「返回时互斥量处于锁定状态、调用线程为所有者」的说明也可以直接验证这个逻辑:如果函数在阻塞阶段就返回,那返回后调用线程根本没有持有互斥量,和标准定义完全冲突。

如果需要加锁失败不阻塞的逻辑,可以使用pthread_mutex_trylock()接口,该接口尝试加锁失败后会立刻返回EBUSY错误码,不会挂起调用线程。

内容的提问来源于stack exchange,提问作者African_king

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:24:02