linux的mutex状态查询命令,如何断言std :: mutex是否已锁定?

使用GCC 4.8.2(在Linux / Debian / Sid 64位上)或GCC 4.9(在C ++ 11中可用)-我有一些互斥锁

std::mutex gmtx;

实际上,它是static某个类的成员,Foo同时包含下面的alpha和beta方法。

它被锁定alpha像

void alpha(void) {

std::lock_guard<:mutex> g(gmtx);

beta(void);

// some other work

}

我想检查beta一下确实gmtx被锁定了:

void beta(void) {

assert (gmtx.is_locked());

// some real work

}

(is_locked仅在内部调用的通知assert。。。效率可能非常低下,有时甚至不准确)

当然,我还有其他函数调用beta,例如

void gamma(void) {

std::lock_guard<:mutex> g(gmtx);

beta();

// some other work

}

但is_locked不存在。…我应该如何定义它?(实际上,我想确保互斥体已被某些[间接]调用者锁定在同一线程中。)

(我要测试的原因assert是beta可以在其他地方调用)

我不能使用try_lock(除非使用递归互斥锁),因为在通常情况下,它将锁定一个已经锁定的互斥锁…(由调用方锁定在同一线程中),这不仅是未定义的行为,而且是完全阻塞的。

除非确实需要,否则我想避免使用递归互斥锁(比普通互斥锁更昂贵)。

注意:真正的程序要复杂一些。实际上,所有方法都在一个类中,该类维护“项目”上的命名双向关系。所以我在该类中有一个从项目到名称的映射,另一个是从名称到项目的映射。beta将内部方法添加一个真正的命名,并alpha和gamma会发现它的名称,或通过其项目的名称-

或加入-一个项目的方法。

PS:真正的程序尚未发布,但应该成为MELT的一部分-

将来的监视器;您可以从此处(一个临时位置)下载它(Alpha舞台,非常容易出错)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值