首页 > 编程语言 >c++多线程,锁

c++多线程,锁

时间:2024-09-23 10:34:37浏览次数:8  
标签:std thread lock c++ vector mutex th 多线程

1)机器最大线程数
uint16_t max_thread = thread::hardware_concurrency();

2)vector中管理线程
获取线程id
a)thread::id _id=std::this_thread::get_id();
b)thread th(getSum_vector, ref(arr), ref(_sum));
cout << th.get_id();
容器中存储线程变量:使用emplace_back原位构造
a) vector _vector(10);
for (int i = 0; i < 2; i++)
{
_vector.emplace_back(getSum_vector, ref(arr), ref(_sum));

}
  1. std::thread
    使用std::thread()创建线程对象
    a)std::thread th(function,avg)
    b)std::thread th(&class::function,,&类实例,avg)
    c)std::thread th(std::bind(&class::function,,&类实例,avg))
    d)std::thread th{{过程}}
    如果function需要引用类型参数,则使用ref()

4)线程等待/分离
创建后需要手动join/detach
或使用RAII机制,在离开作用域时自动分离


class Thread_Guard {
public:
	Thread_Guard(std::thread& _th):th(_th)
	{
		std::cout << "call";
	}

	~Thread_Guard()
	{
		if (th.joinable())
			th.join();
		else {
		
		}
		std::cout << "Thread_Guard diaoy endding" << std::endl;
	}
private:
	std::thread& th;


};

5)锁类型
std::lock_guardstd::mutex _guard
std::unique_lock独占锁
std::share_lock共享锁
std::scoped_lock (c++17)同时获得锁

6)锁

//同时加锁
std::mutex _mutex1;
std::mutex _mutex2;
//使用lock()同时加锁
std::lock(_mutex1, _mutex2);
std::lock_guardstd::mutex(_mutex1, std::adopt_lock);
std::lock_guardstd::mutex(_mutex2, std::adopt_lock);
//std::adopt_lock 是一个标记,告诉 std::lock_guard 它应该采用已经锁定的互斥锁,而不是再次尝试锁定它。

7)共享锁std::share_lock
场景:写操作需要独占锁。而读操作需要共享锁。
std::share_mutex(c++17),C++11标准没有共享互斥量,可以使用boost提供的boost::shared_mutex

8)层级锁,递归锁

标签:std,thread,lock,c++,vector,mutex,th,多线程
From: https://www.cnblogs.com/light-LifeClub/p/18424334

相关文章

  • 南沙C++信奥老师解一本通题 1260:【例9.4】拦截导弹(Noip1999)
    ​【题目描述】某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦......
  • Qt C++设计模式->组合模式
    组合模式(CompositePattern)是一种结构型设计模式,允许你将对象组合成树形结构以表示部分与整体的层次关系。组合模式使得客户端可以以统一的方式对待单个对象和组合对象,简化了对复杂树形结构的操作。组合模式的应用场景组合模式非常适合用于需要处理树形结构的场景,比如文件系......
  • 【C++驾轻就熟】string类以及string类的模拟实现
    目录一、为什么学习string类?二、标准库中的string类 2.1string类(了解)2.2string类的常用接口说明 1.string类对象的常见构造 2.string类对象的容量操作3.string类对象的访问及遍历操作 4.string类对象的修改操作5.string类非成员函数 三、 string类的......
  • C++ 列表初始化 {}
    花括号的形式{},进行列表初始化,在C++11中初始化变量到了全面的应用。可参看《C++Primer》P39P76P88等相关内容信息。Note:当我们提供一个类内初始值时,必须以符号=或者花括号表示。《C++Primer》P246。如下:classDog{public:Dog(intage):m_age(age){}......
  • c++中内置函数
    intmain(){autofactorial=[&](intn,auto&&self)->int{if(n<=1)return1;returnn*self(n-1,self);//调用自己};std::cout<<"Factorialof5:"<<factorial(5,factorial)......
  • [OpenCV] 数字图像处理 C++ 学习——16直方图均衡化、直方图比较 详细讲解+附完整代码
    文章目录前言1.直方图均衡化的理论基础(1)什么是直方图(2)直方图均衡化原理(3)直方图均衡化公式2.直方图比较理论基础(1)相关性(Correlation)——HISTCMP_CORREL(2)卡方(Chi-Square)——HISTCMP_CHISQR(3)十字交叉性(Intersection)——HISTCMP_INTERSECT(4)巴氏距离......
  • c++中字符/串->整数
    char字符->整数数字:std::isdigit用于判断某个字符是否为数字(0-9)。字符串->数字:std::stoi用于将字符转换为整数。intisdigit(intch);//std::isdigit接受的参数类型为int,通常会传递字符类型(char)作为参数,但是字符会自动转换为对应的int值。intstoi(conststd::string&......
  • Python&C++迭代器比较
    Python&C++迭代器比较内容在Python和C++中,迭代器的概念都有类似的作用,但它们的实现方式和细节上存在一些区别。下面我们将从迭代器的定义、特性以及Python和C++中的不同点来进行对比。1.什么是迭代器?迭代器是一种对象,它允许你遍历一个集合(如列表、字典、字符串等)中......
  • C++入门——类和对象(上)
    文章目录一、类的定义1.1类的定义格式1.2访问限定符1.3类域二、实例化2.1实例化概念2.2对象大小三、this指针四、C++和C语言实现Stack栈的对比总结一、类的定义1.1类的定义格式class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分......
  • C++ 解析 RDP 协议
    远程桌面协议(RemoteDesktopProtocol,RDP)是微软开发的一种网络通信协议,用于提供远程桌面会话服务。它允许用户通过网络连接至远程计算机,并像使用本地计算机一样操作远程系统。本文档将详细探讨在C++环境中如何解析RDP协议,涵盖协议层次解析、连接过程管理、数据加密解密、......