C++11并发编程实作

Vala ·
更新时间:2024-09-21
· 758 次阅读

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+ 并发编程 c++11 C++ 并发

需要 登录 后方可回复, 如果你还没有账号请 注册新账号