gpt4 book ai didi

c++ - pthread_mutex_destroy : why is it returning EBUSY?

转载 作者:太空狗 更新时间:2023-10-29 20:40:31 26 4
gpt4 key购买 nike

我正在单步执行我们的可执行文件链接到的第三方库中的一些代码,特别是“关闭”代码。我正在向我们的应用程序发送 SIGQUIT,这将关闭第三方对象。

出于某种原因,该库对 pthread_mutex_destroy 的可靠调用失败并返回 16:EBUSY。文档说,当“实现检测到试图销毁互斥锁​​引用的对象时,它被另一个线程锁定或引用(例如,在 pthread_cond_timedwait() 或 pthread_cond_wait() 中使用时)。”

我在调用 pthread_mutex_destroy() 的地方放置了一个断点。

a) 我不相信它被锁定了,因为互斥体的状态看起来像这样:$6 = {__data = {__lock = 0, __count = 0, __owner = 0, __nusers = 4294967293, __kind = 0, __spins = 0, __list = {__prev = 0x0, __next = 0x0}}, __size = '\000' "\375,\377\377\377", '\000' , __align = 0}

我的猜测是 __lock = 0 表示“解锁”。但是,我不知道 __nusers 真正代表什么。

b) 我没有看到 pthread_cond_wait() 或 pthread_cond_timedwait() 的任何证据。我得到了所有正在运行的线程的回溯,没有人在等待这个互斥量。

这里可能发生了什么?

最佳答案

显然,您的问题出在 __nusers 成员身上。我想,您在某处解锁了已经解锁的互斥量。

关于c++ - pthread_mutex_destroy : why is it returning EBUSY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23750213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com