Semaphore acquire问题(貌似ACE的bug), 请大家帮忙测试一下
本帖最后由 zhuliang 于 2011-3-15 12:46 编辑请高手看看下面一段简单的程序:
#include <ace/Synch.h>
#include <iostream>
#include <time.h>
using namespace std;
main(int argc, char* argv[])
{
cout<<"start!!!"<<endl;
struct tm utctm;
time_t timeNow = time(NULL);
gmtime_r(&timeNow, &utctm);
ACE_Thread_Semaphore que(0);
cout<<"before acquire!!!"<<"errno="<<ACE_OS::last_error()<<endl;
int res = que.acquire();
cout<<"after acquire!!! res="<<res<<"errno="<<ACE_OS::last_error()<<endl;
cout<<"err msg="<<ACE_OS::strerror(ACE_OS::last_error())<<endl;
}
调了gmtime_r后,再调semaphore acquire就有问题,如果没有gmtime_r,只调acquire就很好。这是ACE的bug吗?ACE(6.0.0)+Linux(SuSe 2.6.32.12-0.7)下才会出现这个问题,AIX下运行没这个问题。要么就是我ACE安装有问题? 不知道楼主指的具体是什么问题?建议把实际的使用环境描述出来。
看上面的程序,觉得semaphore的语义建议去确认一下
ACE_Thread_Semaphore que(0);这条语句把semaphore的资源初始化为0在此例子使用岂不是要造成死等待?
别外编译时请加上头文件<ace/OS_NS_string.h> 谢谢楼上。其实很简单,定义ACE_Thread_Semaphore que(0)是为了在实际代码中是等待另一个线程release(), 然后才acquire。以上代码是我从实际code里narrow出来的一个小测试例子,其实环境就是ACE6.0.0+Linux(SuSe 2.6.32.12-0.7), gcc 是4.3.4,如果谁有类似环境,麻烦帮我测一下,确认一下到底是ACE Linux下的bug,还是其他环境问题。不胜感谢! 估计是使用的问题,像这种情况不太可能出问题; 谢谢楼上回答,“使用问题”是什么意思?AIX上也这么用的,但是好的。我唯一担心的可能是安装时什么地方的问题,所以哪位有环境的能帮我测一下?否则只能提交bug form了。
页:
[1]