首页 > 其他分享 >线程管控

线程管控

时间:2024-10-01 15:22:55浏览次数:6  
标签:std 管控 thread vector 线程 拷贝 构造函数

声明

此随笔内容是根据大佬博客进行学习,如想学习,可以访问如下链接。
原文链接:https://www.llfc.club/category?catid=225RaiVNI8pFDD5L4m807g7ZwmF

线程归属权

线程归属于变量管理,即通过std::thread创建的变量进行管理。
std::thread C++不允许其执行拷贝构造和拷贝赋值, 所以只能通过移动和局部变量返回的方式将线程变量管理的线程转移给其他变量管理。
C++ 中类似的类型还有std::mutex, std::ifstream, std::unique_ptr

可以通过std::move进行转移

容器存储

容器存储线程时,比如vector,如果用push_back操作势必会调用std::thread,这样会引发编译错误,因为std::thread没有拷贝构造函数。故采用的时emplace方式,可以直接根据线程构造函数需要的参数构造,这样就避免了调用thread的拷贝构造函数。

void use_vector() {
    std::vector<std::thread> threads;
    for (unsigned i = 0; i < 10; ++i) {
        threads.emplace_back(param_function, i);
    }
    for (auto& entry : threads) {
        entry.join();
    }
}

std::thread::hardware_concurrency() 是 C++ 标准库中 std::thread 类的一个静态成员函数,用于查询系统支持的线程硬件并发数,即理论上系统能够同时运行的最大线程数。这通常对应于处理器的核心数,包括超线程技术(如 Intel 的超线程技术)提供的逻辑核心。

线程ID

get_id()可以获取线程的ID

std::thread t([](){
    std::cout << "thread start" << std::endl;
});
t.get_id();

标签:std,管控,thread,vector,线程,拷贝,构造函数
From: https://www.cnblogs.com/xuejx/p/18442750

相关文章

  • 线程基础
    线程发起回调函数func(a)传递给回调函数的参数astd::threadt1(func,a)线程等待std::threadt1(func,a)在其它线程中调用,其它线程等待t1线程执行完毕t1.join()仿函数作为参数时classtest{public: voidoperator()(std::stringstr){ std::cout<<"stris......
  • 【多线程奇妙屋】 Java 的 Thread类必会小技巧,教你如何用多种方式快速创建线程,学并发
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • [操作系统]线程上下文切换
    单核处理器能够支持多线程执行代码就是因为线程的上下文切换。具体是如何做到的呢?CPU通过给每个线程分配CPU时间片来实现这个机制。什么是时间片?CPU分配给每个线程的时间。时间片非常短一般几十ms。CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的。什么是线程上下......
  • 多线程Day01
    多线程线程、进程、多线程程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念进程是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义,线程是CPU调度和执......
  • 初学线程
    线程概念线程是进程中的⼀个执行单元,负责当前进程中程序的执行,⼀个进程中至少有⼀个线程⼀个进程中是可以有多个线程多个线程共享同一个进程的资源,每个线程参与操作系统的统一调度进程相当于是由进程资源+主线程+子线程,组合而来程序由进程进行执行,进程由线程执行线程与进......
  • AutoJsPro项目脚本合集(附带全套源码,线程不会的看过来)
    话不多说,直接上代码"ui";letKeepAliveService={/**开启*/start:function(idStr,nameStr){try{idStr=idStr||"";letchannel_id=idStr+".foreground";letchannel_name=nameStr+"前台服务通知&q......
  • 外设管控是什么,都有哪些方法可以管控外设(外设管控的六个小技巧)
    外设管控是指通过技术手段和管理策略,控制外接设备的使用,防止数据泄露或安全风险。以下是一些常见的外设管控方法:1.USB端口管控USB接口是最常见的外设连接方式,也是数据泄露的高风险途径之一。以下是针对USB接口的管控方法:禁用或限制USB端口:使用软件禁用未授权的USB设备,仅......
  • redis: 开启io多线程
    一,配置redis.conf[root@webconf]#viredis.conf修改两个参数#Soforinstanceifyouhaveafourcoresboxes,trytouse2or3I/O#threads,ifyouhavea8cores,trytouse6threads.Inorderto#enableI/Othreadsusethefollowingconfigurationdire......
  • 【多线程】多线程(1):概念,创建线程
    【多线程的概念】之前写过的所有代码,都只能使用“一个核心”,此时无论如何优化代码,最多只能用一个cpu核心,把这个核心跑满了,其他核心也是空闲着,通过写特殊的代码,把多个cpu核心都能应用起来,此为“并发编程”之前使用的并发模式为“多进程编程”,其在创建/销毁进程时开销较大,一旦......
  • c++线程--快速上手
    线程创建头文件#includethread是在C++11标准中引入的。C++11标准引入了对多线程编程的标准化支持,其中包括了线程的创建、管理和同步机制。头文件提供了基本的线程支持库,允许开发者直接使用c++线程进行并行编程,而无需依赖操作系统特定的API#include<iostream>#include......