C++11并发编程实作

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标准没有直接操作线程终止的函数。

你可能感兴趣的:(C++)