3

我正在使用内核版本 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() 有问题吗?除了使用这些功能,我还有什么其他选择?

4

1 回答 1

1

基本上混合多线程和“fork()”并不容易,需要更多关于你的软件的细节来提供有用的帮助。请阅读http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them以了解混合线程和 fork() 时出现的问题。

于 2013-03-04T10:06:28.280 回答