我使用pthread_create(&thread1, &attrs, //... , //...);并需要一些条件发生需要杀死这个线程如何杀死这个?
我在C中编写一个Unix应用程序,它使用多个控制线程.我遇到一个问题,主要功能在它产生的线程有一个更改完成他们的工作之前终止.我该如何防止这种情况发生.我怀疑我需要使用pthread_join原语,但我不确定如何.谢谢!
1)我是std :: thread的新手,我想知道调用pthread_sigmask()阻止在所创建的特定线程中的某些信号是否是一个好习惯std::thread。
我不希望新线程接收SIGTERM,SIGHUP等信号,因为主进程已经安装了这些信号的处理程序。
因此,调用pthread_sigmask()阻塞由创建的线程中的某些信号是一种好习惯std::thread吗?
2)另外,我相信的效果pthread_sigmask(SIG_BLOCK, &mask, NULL)仅适用于使用创建的线程
std::thread(&Log::rotate_log, this, _logfile, _max_files, _compress).detach();
Run Code Online (Sandbox Code Playgroud)
并rotate_log()作为启动函数调用。
并且的效果pthread_sigmask(SIG_BLOCK, &mask, NULL)将不适用于std::thread(&Log::rotate_log, this, _logfile, _max_files, _compress).detach()被调用的线程。
我的理解正确吗?
void rotate_log (std::string logfile, uint32_t max_files, bool compress)
{
sigset_t mask;
sigemptyset (&mask);
sigaddset (&mask, SIGTERM);
sigaddset (&mask, SIGHUP);
pthread_sigmask(SIG_BLOCK, &mask, NULL);
// Do other stuff.
}
void Log::log (std::string message)
{
// Lock using mutex
std::lock_guard<std::mutex> lck(mtx);
_outputFile << …Run Code Online (Sandbox Code Playgroud)