std::thread(线程) 学习记录
发布日期:2022-02-06 00:27:07 浏览次数:27 分类:技术文章

本文共 2216 字,大约阅读时间需要 7 分钟。

std::thread(线程) 学习记录

1. thread的创建以及面临的问题

1.1 thread.cpp

//创建线程,C++中提供头文件thread,使用std的thread实例化一个线程对象的创建//std::thread在#include头文件中声明,因此使用std::thread需要包含#include头文件#include 
#include
#include
using namespace std;void thread1(){
for(int i = 0; i < 20; ++i) {
cout<<"thread1..."<

1.2 终端编译

在这里插入图片描述

1.3 编译结果

在这里插入图片描述

2. thread::join( )

2.1 thread.cpp

//解决方法之一:thread::join()//使用join接口可以解决上述问题,join的作用是让主线程等待直到该子线程执行结束.#include 
#include
#include
using namespace std;void thread1(){
for(int i = 0; i < 10; ++i) {
cout<<"thread1..."<

2.2 编译结果

在这里插入图片描述

3. thread::detach( )

3.1 thread.cpp

//解决方法:thread::detach()//将当前线程对象所代表的执行实例与该线程对象分离,使得线程的执行可以单独进行.一旦线程执行完毕,它所分配的资源将会被释放.//detach是用来分离线程,这样线程可以独立执行,不过这样由于没有thread对象指向该线程而失去了对它的控制.//当对象析构时,线程会继续在后台执行,但是当主程序退出时并不能保证线程执行完.//如果没有良好的控制机制或者这种后台线程比较重要,最好不用detach而使用join.#include 
#include
#include
using namespace std;void thread1(){
for(int i = 0; i < 10; ++i) {
cout<<"thread1..."<

3.2 编译结果

在这里插入图片描述

4. mutex

mutex是防止不同的线程同时操作同一个共享数据.

4.1 mutex_test.cpp

//头文件mutex是用来保证线程同步的,防止不同的线程同时操作同一个共享数据.//#include:该头文件主要声明了与互斥量相关的类,//包括std::mutex系列类,std::lock_guard,std::unique_lock#include 
#include
#include
#include
using namespace std;mutex m;int cnt = 10;void thread1(){
while(cnt > 5) {
m.lock(); if(cnt > 0) {
--cnt; cout<
<
0) { m.lock(); if(cnt > 0) { cnt -= 10; cout<
<

4.2 编译结果

在这里插入图片描述

  • 结果分析:mutex是不安全的,如果当一个线程在解锁之前就异常退出了,那么其他被阻塞的线程就无法进行下去.

5. std::lock_guard

5.1 lock_guard.cpp

使用lock_guard则相对安全,它是基于作用域的,能够自解锁.

//使用lock_guard则相对安全,它是基于作用域的,能够自解锁,当该对象创建时,它会像m.lock()一样获得互斥锁//当生命周期结束时,它会自动析构(unlock),不会因为某个线程异常退出而影响其他线程.#include 
#include
#include
#include
using namespace std;mutex m;int cnt = 10;void thread1(){
while(cnt > 5) {
lock_guard
lock(m); if(cnt > 0) {
--cnt; cout<
<
0) { lock_guard
lock(m); if(cnt > 0) { cnt -= 2; cout<
<

5.2 编译结果

在这里插入图片描述

转载地址:https://blog.csdn.net/weixin_46181372/article/details/115533047 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Scan Context 学习记录
下一篇:PCL_viewer指令

发表评论

最新留言

很好
[***.229.124.182]2024年04月09日 15时45分45秒