我想编写多线程程序,如果发生某些信号则退出所有线程。 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;
}
这是正确的方法,这个程序线程安全吗?