我们在使用pthreads sem_timedwait的RedHat Enterprise Linux系统上看到了奇怪的行为.它只发生在5.3版本之后.
当我们使用sem_init在后台线程上创建信号量时,不会返回任何错误.当我们执行sem_timedwait时,我们立即返回errno = 38(ENOSYS),表明它不受支持.
如果我们在主线程上做同样的事情,它按预期工作,我们从sem_timedwait没有得到任何错误.
我们在RHEL 5.2或之前没有看到它.我们尝试使用gcc 3.2.3和4.1.2编译代码并获得相同的结果,因此它似乎是一个运行时问题.
所以,我的问题(最后;)
1)有没有人见过这个?2)RHEL 5.3以后是否已知问题?3)我们使用sem_timedwait来睡一个线程.Linux上还有哪些替代方法可以做同样的事情?
如果这是另一个问题的副本,请告诉我.我看了但是找不到一个有同样问题的人,只是OSX的类似问题,而不是我们正在使用的问题.
谢谢,pxb
更新:刚刚完成了一些测试,结果如下:
因此,它似乎是RHEL5.4上的64位和32位运行时库之间的区别(看起来似乎是RHEL5.3).唯一的另一个区别是32位和64位版本分别由RHEL5.1和RHEL5.4框完成.