当前位置: 首页 > article >正文

C++并发编程实战

第2章:重点

1、
首先判断线程是否已加入, 如果没有,会调用join()进行加入。 这很重要!!!!!!
因为join()只能对给定的对象调用一次, 所以对给已加入的线程再次进行加入操作时,将会导致错误。

if (t_.joinable())//只能调用一次join,suoyi 之后就不再joinable。
{
       t_.join();
}


2、
拷贝构造函数和拷贝赋值操作被标记为 =delete ③, 是为了不让编译器自动生成它们。 
直接对一个对象进行拷贝或赋值是危险的,!!!!
因为这可能会弄丢已经加入的线程。 通过删除声明, 任何尝试给thread_guard对象赋值的操作都会引
发一个编译错误。 想要了解删除函数的更多知识, 请参阅附录A的A.2节。

 thread_guard(thread_guard const&) = delete;
 thread_guard& operator=(thread_guard const&) = delete;


3、
每个 std::thread 只能被进行一次 join() 或 detach(),操作后 joinable() 由 true 变为 false。

4、
在传递到 std::thread 构造函数之前就将字面值转化为 std::string 对象:
void f(int i,std::string const& s);

char buffer[1024]; // 1
sprintf(buffer, "%i",some_param);
std::thread t(f,3,buffer); // 2

需要将 std::thread t(f, 3, buffer); // 2
改成=》std::thread t(f, 3, std::string(buffer)); // 使用std::string, 避免悬垂指针

5、对于传非常引用时,直接传值会报错
widget_data data;
thread t(udpate_data_for_widget, data);
需要改成ref
thread t(udpate_data_for_widget, ref(data));

6、转移所有权
使用move来转移
如果转移到一个已经关联的线程,会抛出异常!(一个线程只能关联一个线程任务(线程函数),如果给他关联多个会出错!)

7、std::thread::hardware_concurrency() 
在新版C++标准库中是一个很有用的函数。 这个函数会返回在一个程序中“能并发的线程数量”;如果没有定义,则返回0

计算量的最大值(任务)和硬件支持线程数中, 较小的值为启动线程的数量:
unsigned long const num_threads= std::min(hardware_threads != 0 ? hardware_threads : 2, max_threads);

8、线程标识类型为 std::thread::id,并可以通过2种方式进行检索。 
第一种,可以通过调用 std::thread 对象的成员函数 get_id() 来直接获取。 
            如果 std::thread 对象没有与任何执行线程相关联, get_id() 将返
            回 std::thread::type 默认构造值,这个值表示“无线程”。 
第二种,如果在当前线程中,调用 std::this_thread::get_id() (这个函数定义在 <thread> 头文件中)也可以获得线程标识。

第4章:重点知识

参考:

《c++并发编程实战》 笔记-CSDN博客

C++并发编程学习笔记_c++并发编程笔记-CSDN博客

C++并发编程实战学习笔记-CSDN博客

《C++并发编程实战》读书笔记(3):并发操作的同步 - MoonZZZ - 博客园

《C++并发编程实战》读书笔记(2):并发操作的同步-腾讯云开发者社区-腾讯云


http://www.kler.cn/a/322975.html

相关文章:

  • 基于SpringBoot的旅游网站(程序+数据库+报告)
  • Python教程笔记(2)
  • ServletConfig、ServletContext、HttpServletRequest与HttpServletResponse常见API
  • (一)Ubuntu20.04服务器端部署Stable-Diffusion-webui AI绘画环境
  • Pytorch如何将嵌套的dict类型数据加载到GPU
  • 65 mysql 的 表元数据锁
  • re轻松拆分四则运算expression(^从头匹配、(?:xxxx)非捕获组、| 交替运算符联合演习)
  • 空间计算/XR的现状:Meta Orion的优势与挑战
  • 【微服务即时通讯系统】——etcd一致性键值存储系统、etcd的介绍、etcd的安装、etcd使用和功能测试
  • 基于微信小程序的竞赛答题小程序开发笔记(一)
  • PHP静态绑定和超全局变量(superglobals)
  • 找最小数 - 华为OD统一考试(E卷)
  • php基础语法
  • 下载配置Android Studio(2024年9月)
  • MongoDB-索引的使用和索引类型
  • 如何在 Windows PC 或笔记本电脑上恢复未保存的 Word 文档
  • Chromium webui如何与c++接口通信
  • 幕后魔术:掌握 PyTorch 中延迟初始化的精妙艺术
  • 五子棋双人对战项目(2)——登录模块
  • 【IoT-NTN】系统消息SIB31信令分析
  • 宝塔centOs添加node环境变量
  • WPF入门教学十五 ViewModel的设计与实现
  • 供应QCA8337-AL3C-R芯片
  • HTTP 请求方法
  • OpenAI o1-preview:详细分析
  • 边缘计算网关在工业中的应用