如果发生某些信号则退出线程

时间:2016-01-23 14:47:17

标签: multithreading c++11

我想编写多线程程序,如果发生某些信号则退出所有线程。 A试试这种方式:

#include <iostream>
#include <thread>
#include <mutex>
#include <chrono>
#include <random>
#include <csignal>
namespace {
using namespace std;
mutex xmutex;
int data = 0;
std::sig_atomic_t stopFlag = 0;
void inc(int id)
{
    for(;!stopFlag; )
    {
       unique_lock<mutex> lock(xmutex);
       ++data;
    }
}
void onExit(int)
{
    stopFlag = 1;
}
void init()
{
    signal(SIGINT, &onExit);
}
}
int main()
{
    init();
    vector<thread> thds;
    for(int i = 0; i < 10; ++i)
        thds.push_back(thread(inc, i));
    for(auto& t : thds)
        t.join();
    return 0;
}

这是正确的方法,这个程序线程安全吗?

0 个答案:

没有答案