C++11之后加入了并行编程的接口,使用起来非常简单:
#include
#include
void p()
{
while (true)
{
std::cout << "asd" << std::endl;
}
}
void main()
{
std::thread p(p);
p.join();//启动多线程,线程结束前程序会停在这里阻塞住
}
在两个join函数放在一起的时候,他们是可以一起执行的,编译器默认在最后一个join函数后进行阻塞,也就是如同下面那么写程序是OK的:
std::thread revVlpthead(revVlpData);
std::thread p(p);
revVlpthead.join();
p.join();//线程结束前程序会停在这里阻塞住
第二句join语句还是会被执行。然而如果改成如下的形式则第二句不会被执行:
std::thread revVlpthead(revVlpData);
revVlpthead.join();//线程结束前程序会停在这里阻塞住
std::thread p(p);
p.join();//线程结束前程序会停在这里阻塞住
在MFC下环境下,如果使用join函数则相当于没有使用多线程,因为程序依然等在那边,因此可以使用非阻塞的detach函数:
std::thread p(p);
p.detach();//程序不会阻塞
在线程中可以加入休眠函数让出处理器:
#include //时间相关头文件
std::this_thread::sleep_for(std::chrono::seconds(1));//线程休眠一段时间
在线程共同访问的数据前面,为了保证数据一致性,需要加入互斥体:
包含头文件
#include //线程互斥体头文件
static std::mutex exclusive;//线程互斥体
exclusive.lock();
//互斥内存区
exclusive.unlock();
另外,如果在线程里面加入了循环,需要自行加一个标志位让线程在某种情况下退出,C++11标准没有直接操作线程终止的函数。