相关疑难解决方法(0)

在Pthread库中杀死线程

我使用pthread_create(&thread1, &attrs, //... , //...);并需要一些条件发生需要杀死这个线程如何杀死这个?

c multithreading posix pthreads

39
推荐指数
3
解决办法
8万
查看次数

C程序中的多个线程

我在C中编写一个Unix应用程序,它使用多个控制线程.我遇到一个问题,主要功能在它产生的线程有一个更改完成他们的工作之前终止.我该如何防止这种情况发生.我怀疑我需要使用pthread_join原语,但我不确定如何.谢谢!

c unix multithreading pthreads

5
推荐指数
2
解决办法
5784
查看次数

在std :: thread创建的线程中调用pthread_sigmask是一种好习惯吗?

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)

c++ multithreading signals pthreads stdthread

2
推荐指数
2
解决办法
309
查看次数

标签 统计

multithreading ×3

pthreads ×3

c ×2

c++ ×1

posix ×1

signals ×1

stdthread ×1

unix ×1