相关疑难解决方法(0)

我们应该在C中使用exit()吗?

问题关于使用exitC++中.答案讨论主要是因为RAII不是好主意,例如,如果exit在代码中某处调用,则不会调用对象的析构函数,因此,如果例如析构函数是为了将数据写入文件,则不会发生这种情况,因为没有调用析构函数.

我感兴趣的是C中的这种情况.类似的问题是否也适用于C?我想在C中我们不使用构造函数/析构函数,C中的情况可能会有所不同.所以exit在C中使用是否可以?

我已经看到了下面的函数,我觉得在某些情况下可以使用它,但是如果我们在C中使用类似的问题感兴趣exit,如上面用C++所述?(这将使使用下面的功能不是一个好主意.).

void die(const char *message)
{
    if(errno) {
        perror(message);
    } else {
        printf("ERROR: %s\n", message);
    }

    exit(1);
}
Run Code Online (Sandbox Code Playgroud)

c

78
推荐指数
5
解决办法
1万
查看次数

当abort()比exit()更受欢迎时?

我知道两者之间的差异.一个值得注意的事情是abort()发送SIGABRT信号,因此当您的软件依赖它们时它可能是相关的.但是对于一个典型的应用程序exit()似乎是更安全的abort()版本......?使用abort()而不是exit()还有其他问题吗?

c c++ exit abort

24
推荐指数
3
解决办法
4971
查看次数

如何从任何线程安全地使用 exit()

根据手册页 (2),该exit函数不是线程安全的: ,这是因为该函数尝试通过调用使用和MT-Unsafe race:exit注册的回调来清理资源(将数据刷新到磁盘、关闭文件描述符等...)。我希望我的程序能够做到这一点!(我的一个线程在整个程序的生命周期中保持文件描述符打开,所以这对我来说不是一个选择,因为我希望将所有数据写入输出文件)on_exitatexit_exit

我的问题如下:如果我很小心并且我不在线程之间共享任何敏感数据(如 fd),那么exit在多线程程序中调用是否“可接受”?请注意,我仅exit在发生不可恢复的错误时才调用。然而,当程序尝试退出时,我无法承受段错误。问题是,任何线程都可能发生不可恢复的错误......

我正在考虑使用 setjmp/longjmp “很好地”终止我的线程,但这会非常复杂,并且需要在我的代码中进行许多更改。

任何建议将不胜感激。谢谢 !:)

编辑:感谢@Ctx启发,我想出了以下想法:

#define EXIT(status) do { pthread_mutex_lock(&exit_mutex); exit(status); } while(0)

当然,exit_mutex 必须是全局的(外部)。

c multithreading stdio atexit thread-safety

8
推荐指数
1
解决办法
2940
查看次数

atexit被认为有害吗?

atexit图书馆等大型项目中使用是否存在固有的危险?

如果是这样,那背后的技术性质atexit可能会导致大型项目出现问题?

c c99 atexit

3
推荐指数
1
解决办法
726
查看次数

标签 统计

c ×4

atexit ×2

abort ×1

c++ ×1

c99 ×1

exit ×1

multithreading ×1

stdio ×1

thread-safety ×1