当前位置: 技术问答>linux和unix
unix中多线程thread_unlock问题?
来源: 互联网 发布时间:2017-03-28
本文导语: 在AIX上,运行一个多线程程序,然后用truss跟踪,发现有thread_unlock与thread_waitlock_函数,但是使用nm test(程序名)|grep thread_unlock 没有发现该函数,检查相应的加载的动态库中也没有thread_unlock函数,这让我感到很困...
在AIX上,运行一个多线程程序,然后用truss跟踪,发现有thread_unlock与thread_waitlock_函数,但是使用nm test(程序名)|grep thread_unlock 没有发现该函数,检查相应的加载的动态库中也没有thread_unlock函数,这让我感到很困惑,thread_unlock与thread_waitlock_这些函数从何而来?难道是系统自动添加上的thread_unlock加锁操作?
(ps:makefile没有使用-D_THREAD_SAFE与-lpthread
这是truss的部分记录:
0.0008: thread_waitlock_(0x3000A6C0, 1, 0x00000000) = 1
0.0002: thread_unlock(0x3000A6C0) = 1
0.0001: thread_unlock(0x3000A6C0) = 0
0.0002: thread_waitlock_(0x3000A6C0, 1, 0x00000000) = 1
= 0
0.0001: thread_waitlock_(0x3000A6C0, 1, 0x00000000) = 1
= 1
0.0005: thread_unlock(0x3000A6C0) = 0
)
(ps:makefile没有使用-D_THREAD_SAFE与-lpthread
这是truss的部分记录:
0.0008: thread_waitlock_(0x3000A6C0, 1, 0x00000000) = 1
0.0002: thread_unlock(0x3000A6C0) = 1
0.0001: thread_unlock(0x3000A6C0) = 0
0.0002: thread_waitlock_(0x3000A6C0, 1, 0x00000000) = 1
= 0
0.0001: thread_waitlock_(0x3000A6C0, 1, 0x00000000) = 1
= 1
0.0005: thread_unlock(0x3000A6C0) = 0
)
|
这两个函数估计不是应用程序自己直接调用的
很可能是某个系统调用,像进程间同步机制(信号灯啥的)间接调用的
很可能是某个系统调用,像进程间同步机制(信号灯啥的)间接调用的
|
这个不好说,如果多线程情况下存在锁等待,某种程度是不如单线程执行效率高的。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。