我正在使用内核版本 2.6.10 和“普通”C。
关于我们的程序崩溃的原因,我已经缩小到两个线程。
定时器线程
void TimerThread(void)
{
while (exec) {
usleep(10000);
RSLTCD r = SUCCESS;
// r = LockMutex(Mtx);
do {
// some process
} while(1);
// r = UnlockMutex(Mtx);
}
return ; // Not Reached
}
系统线程
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()ing 和互斥锁会出现问题。所以我删除了互斥锁部分,但它仍然崩溃。
我尝试使用 fork()+execv() 组合和 posix_spawn() 制作自己的“系统调用”函数。两种情况的结果相同。
另外,我尝试过使用除 usleep 之外的其他睡眠功能。(nano_sleep 等)程序仍然崩溃
在多线程进程中使用 system() 和 usleep() 有问题吗?除了使用这些功能,我还有什么其他选择?