- 博客(9)
- 收藏
- 关注
原创 C++11 async、future、packaged_task、promise
std::future是一个类模板std::async 是一个函数模板作用:启动一个异步任务,启动起来之后返回一个std::future对象什么是“启动一个异步任务‘?自动创建一个线程并且开始执行对应的线程入口函数,它返回一个std::future对象,这个对象里面就包含线程入口函数所返回的接口(线程返回的结果),可以通过调用future对象的成员函数get函数来获取。
2023-12-26 15:48:09
1092
1
原创 C++11并发编程条件变量condition_variable
condition_variable条件变量是一个类成员函数:wait()第一个参数是unqinue_lock对象,第二个参数存在默认值当wait()不存在第二个参数的时候,则会阻塞到本行并且对互斥量进行解锁,直到其他线程调用notify_one,当notify_one()被调用时,wait()函数尝试加锁,若加锁不成功,则会阻塞,加锁成功,就继续向下执行。
2023-12-25 21:57:10
476
原创 单例设计模式共享数据
功能:保证函数a()只会被调用一次;具备互斥量这种能力,比互斥量消耗的资源更少;需要结合一个标记使用std::once_flag在函数被调用后,标志位就会标记函数已经是被调用状态。
2023-12-25 17:04:20
370
原创 C++单线程的单例模式
注意懒汉模式是在多线程下需要加锁防止多次创建对象的,不能直接在cSingle的析构函数内执行delete的原因是delete会调用对象的析构函数,这样会导致死递归导致程序异常。
2023-12-22 23:43:50
415
原创 C++11多线程互斥量用法(二)
在unique_lock缺省参数的情况下,unique_lock和lock_guard的作用相同,但是效率差一点,内存占多一点,但是在存在参数的情况下,unique_lock更加的灵活。
2023-12-22 17:38:21
905
原创 C++11多线程互斥量用法(一)
观察可以发现,并非先创建的线程就先执行,执行的顺序是由操作系统控制的,可能在一个线程未执行完时,时间片时间消耗完,线程停止,多个线程的执行顺序是随机的。
2023-12-21 22:09:17
439
原创 C++11线程传递参数的陷阱
可以看到子线程和主线程中var的地址不同,str的地址相同,那var是用引用传递的为什么会出现地址不一样,是因为thread内部对var进行了复制而不是引用传递,需要引用传递需要使用std::ref来解决这样主线程和子线程的var地址就相同了,但仍存在问题,如果将join换为detach,主线程和子线程分离,则会存在主线程执行完毕,局部变量空间呗操作系统回收,子线程在操作时,就会发生异常,所有要谨慎使用detach。
2023-12-21 16:30:17
391
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人