描述 通过调用pthread_mutex_lock来锁定mutex参数引用的互斥对象。 如果互斥对象已锁定,那么调用线程将阻塞,直到互斥对象变为可用为止。 此操作将返回由处于锁定状态的mutex参数引用的互斥对象,调用线程作为其所有者。 如果互斥对象类型为 PTHREAD_MUTEX_NORMAL ,那么不会提供死锁检测。 尝试重新锁定互斥对象会...
第24帧是,jemalloc中进行pthread_mutex_trylock,然后进入了第23帧brpc,然后自然的进入到了第16帧开始调用__dlsym, 然后第15帧调用了_dlerror_run。 然后第14帧调用到了calloc,又重新进入到jemalloc,然后第8帧进入到和24帧同一个位置进行trylock,此时应该死锁了。 从代码中的一段注释(https://github.com/apache/...
不需要NO_PTHREAD_MUTEX_HOOK宏应该也是没问题的了。NO_PTHREAD_MUTEX_HOOK跟这个issue关系不大,主要解决没法调整动态库加载顺序导致找不到pthread_mutex_*符号的问题。 > 对于brpc中,为什么要去hack pthread中的mutex相关符号呢 hook pthread mutex是为了支持contention profiler和[worker潜在死锁问题的检测](https://g...
注意,由于使用了pthread_mutex_trylock函数,因此两个线程不会同时进行互斥锁的获取,而是会依次进行。 总结起来,pthread_mutex_trylock函数是一个非阻塞的函数,用于尝试获取互斥锁。它可以在一些情况下优化多线程代码的性能,提高程序的执行效率。但需要注意,获取失败时需要进行适当的处理,避免出现死锁或其他问题。