我使用的是内核版本2.6.10和“普通”C。
我已经缩小了两个线程来解决我们的程序崩溃的原因。
TIMER THREAD
void TimerThread(void)
{
while (exec) {
usleep(10000);
RSLTCD r = SUCCESS;
// r = LockMutex(Mtx);
do {
// some process
} while(1);
// r = UnlockMutex(Mtx);
}
return ; // Not Reached
}
SYSTEM THREAD
void SystemThread(void)
{
CreateThread(TimerThread, OALTHRD_DEFAULT_STACKSIZE, THREADPRI_NORMAL, 0, 0);
for(;;){
system("echo this is a SYSTEM CALL 1");
system("echo this is a SYSTEM CALL 2");
}
}
我删除了所有剩下的代码,即使只运行这两个“简单”线程, 几个循环(50-100)后程序将崩溃。 我还读过system()使用fork(),有时fork()和互斥有问题。 所以我删除了互斥锁部分,但它仍然崩溃。
我尝试使用fork()+ execv()组合以及posix_spawn()创建自己的“系统调用”函数。 两种情况都产生了相同的结果。
另外,我尝试过使用其他睡眠功能而不是睡眠。(nano_sleep等) 程序仍然崩溃
在多线程进程中使用system()和usleep()是否有问题?除了使用这些功能之外,我还有哪些其他选择?
答案 0 :(得分:1)
基本上混合多线程和“fork()”并不容易,需要更多有关SW的详细信息才能提供有用的帮助。有关混合线程和fork()时问题的描述,请阅读http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them。