首页 > 其他分享 >并发多线程6

并发多线程6

时间:2022-08-31 11:46:07浏览次数:82  
标签:defer 多线程 myUniLock lock 并发 加锁 mutex unique

第六节 unique_lock(类模板)详解

1.unique_lock取代lock_guard

unique_lock比lock_guard灵活很多(多出来很多用法),效率差一点。

unique_lock<mutex> myUniLock(myMutex);

2.unique_lock的第二个参数

2.1 std::adopt_lock:

表示这个互斥量已经被lock(),即不需要在构造函数中lock这个互斥量了。
前提:必须提前lock
lock_guard中也可以用这个参数,可以省去unlock。

2.2 std::try_to_lock:

尝试用mutex的lock()去锁定这个mutex,但如果没有锁定成功,会立即返回,不会阻塞在那里;
使用try_to_lock的原因是防止其他的线程锁定mutex太长时间,导致本线程一直阻塞在lock这个地方
前提:不能提前lock();
owns_lock()方法判断是否拿到锁,如拿到返回true

没拿到锁可以做其他的事情。

2.3 std::defer_lock:

如果没有第二个参数就对mutex进行加锁,加上defer_lock是始化了一个没有加锁的mutex
不给它加锁的目的是以后可以调用unique_lock的一些方法
前提:不能提前lock

3.unique_lock的成员函数(前三个与std::defer_lock联合使用)

3.1 lock():加锁

unique_lock<mutex> myUniLock(myMutex, defer_lock);
myUniLock.lock();

 3.2unlock():解锁。

unique_lock<mutex> myUniLock(myMutex, defer_lock);
myUniLock.lock();
//处理一些共享代码
myUniLock.unlock();
//处理一些非共享代码
myUniLock.lock();
//处理一些共享代码

 


原文链接:https://blog.csdn.net/qq_38231713/article/details/106092134

标签:defer,多线程,myUniLock,lock,并发,加锁,mutex,unique
From: https://www.cnblogs.com/gk520/p/16642387.html

相关文章

  • 并行 并发 同步 异步
    并发:是指在一段时间内多个程序运行在一个CPU上并行,在同一时间点,多个程序运行多个CPU。所以并行最大就是CPU的数量由于GIL的存在,同一个进行的线程只能运行在用一个CPU上,......
  • 多线程01
     一个进程可以有多个线程,至少有一个线程,比如视频中同时听声音,看图像真正的多线程是指有多个cpu,即多核,例如服务器。如果是模拟出来的多线程,在一个cpu的情况下,在同一个时......
  • 7个自定义定时任务并发送消息至邮箱或企业微信案例(crontab和at)
    前言更好熟悉掌握at、crontab定时自定义任务用法。实验at、crontab定时自定义任务运用场景案例。作业、笔记需要。定时计划任务相关命令及配置文件简要说明at......
  • 并发多进程3
    第三节线程传参详解一、传递临时对象作为线程参数要避免的陷阱1:#include<iostream>#include<thread>usingnamespacestd;//voidmyprint(constint&i,char*......
  • Linux查看连接数,并发数
    Linux查看连接数,并发数_minigpsnet的博客-CSDN博客 https://blog.csdn.net/echo3/article/details/10312133Linux查看连接数,并发数内容来自于网络,非本人原创。1、查看......
  • 多线程之线程实现和状态
    多线程1.多线程Thread概述1.1线程简介多任务:同时做多件事情(一遍看电视一遍吃饭);不过,看起来是多个任务同时在做,其实本质上我们的大脑在同一时间依旧是只做了一件事(速......
  • Java8 多线程及并行计算demo
    Java8多线程及并行计算demo #接口publicinterfaceRemoteLoader{Stringload();defaultvoiddelay(){try{Thread.sleep(1000L......
  • 并发编程五、CAS与AQS原理及源码分析
    前言:文章内容:线程与进程、线程生命周期、线程中断、线程常见问题总结本文章内容来源于笔者学习笔记,内容可能与相关书籍内容重合偏向于知识核心总结,非零基础学习文章,可......
  • 多线程实战双色球
    随机数索引生成代码: usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceYpDotNet......
  • java并发 学习记录
    哪些方法会抛出InterruptedException异常?Thread类怎么处理异常可以在Thread中设置异常处理类(实例方法)--setUncaughtExceptionHandlerThread.interupt()方法可以......