- 论坛徽章:
- 0
|
刚刚接触
AIX5.3系统,需要把原来得程序移植到该系统下, 编译环境如下:
thead model: aix
gcc version 4.2.0
//代码逻辑是多线程得程序, 发现线程内函数抛出异常会导致主程序崩溃得现象, 代码大概如下:
//异常类
class MyException
{public:
MyException(){}
virtual ~MyException(){};
};
//某个会抛出异常得函数
void gTest()
{
throw MyException();
}
//线程函数体
void *thd_func(void *ptr)
{
int i = 0;
while (i++ < 1000) //当循环多次执行时会导致崩溃IOT/Abort trap (core dumped)
{
try { gTest();}
catch(MyException const & ex)
{
cout << "exception caught" << endl;
continue;
}
}
return NULL;
}
//发现主线程在启动多个(2-5个)线程后会导致运行一段时间会崩溃IOT/Abort trap (core dumped)
//gdb调试崩溃得堆栈信息如下:
terminate called after throwing an instance of 'MyException'
Program received signal SIGABRT, Aborted.
0xd01246b4 in pthread_kill () from /usr/lib/libpthread.a(shr_xpg5.o)
#0 0xd01246b4 in pthread_kill () from /usr/lib/libpthread.a(shr_xpg5.o)
#1 0xd0124128 in _p_raise () from /usr/lib/libpthread.a(shr_xpg5.o)
#2 0xd0355b2c in raise () from /usr/lib/libc.a(shr.o)
#3 0xd03b3e7c in abort () from /usr/lib/libc.a(shr.o)
#4 0xd213f704 in __gnu_cxx::__verbose_terminate_handler() ()
from /opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.2.0/libstdc++.a(libstdc++.so.6)
#5 0xd214801c in __cxxabiv1::__terminate(void (*)()) ()
from /opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.2.0/libstdc++.a(libstdc++.so.6)
#6 0xd213f57c in std::terminate() ()
from /opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.2.0/libstdc++.a(libstdc++.so.6)
#7 0xd2147e58 in __cxa_throw ()
from /opt/freeware/lib/gcc/powerpc-ibm-aix5.3.0.0/4.2.0/libstdc++.a(libstdc++.so.6)
#8 0x10001000 in gTest() ()
//是不是我异常测试得代码有问题? 或者stdc++库异常不是线程安全得?
[ 本帖最后由 bittertea 于 2009-2-22 20:54 编辑 ] |
|