小编pxb*_*pxb的帖子

在RedHat Enterprise Linux 5.3之上不能正确支持sem_timedwait?

我们在使用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框上使用gcc 4.1.2进行64位构建(使用-L/usr/lib64和-lstdc ++ -lrt)并在64位安装的RHEL5上运行它可以正常工作
  • 如果我在RHEL5.1框上使用gcc 4.1.2进行32位构建(使用-L/usr/lib和-lstdc ++ -lrt)并在完全相同的64位RHEL5框上运行它,我们会收到来自的ENOSYS错误sem_timedwait

因此,它似乎是RHEL5.4上的64位和32位运行时库之间的区别(看起来似乎是RHEL5.3).唯一的另一个区别是32位和64位版本分别由RHEL5.1和RHEL5.4框完成.

c linux semaphore pthreads rhel5

5
推荐指数
1
解决办法
3422
查看次数

标签 统计

c ×1

linux ×1

pthreads ×1

rhel5 ×1

semaphore ×1