【C++】Mutex

news/2024/5/19 2:38:55 标签: mutex

学习Mutex首先需要了解互斥锁的概念,详情见之前的文章。

Mutex类就是C++中实现互斥锁的类,互斥锁有可重入和不可重入之分:

mutex是不可重入的互斥锁,recursive_mutex是可重入的互斥锁;

加上上锁时间的限定后,就有了另外两个互斥锁:mutex_timed, recursive_timed_mutex,分别是可重入/不可重入的互斥锁。

 

互斥锁的操作有:

上锁 lock 如果mutex未上锁,则将其上锁。否则如果已经其它线程lock,则阻塞当前线程。

上锁 try_lock 如果mutex未上锁,则将其上锁。否则返回false,并不阻塞当前线程。

解锁 unlock  如果mutex被当前线程锁住,则将其解锁。否则,是未定义的行为。

timed_mutex会多这么两种操作:

try_lock_for(duration) 如果timed_mutex未上锁,则将其上锁,否则阻塞当前线程,但最长只阻塞duration表示的时间段。

try_lock_until(time_point) 如果timed_mutex未上锁,则将其上锁,否则阻塞当前线程,但最长只会阻塞到time_point表示的时间点就不再阻塞。

try_lock_for/until可以检测到死锁的出现,这是目前想到的一种用途。


http://www.niftyadmin.cn/n/1426265.html

相关文章

【Python】dict

Python中的dict类似C中的map,每个元素有key,以及对应的值。 d {Adam: 95,Lisa: 85,Bart: 59 } len()可以计算dict中的元素个数。 可以通过,key值读取dict中对应的值,也可以通过get()获取key对应值;这两个方法区别在…

工作第二天

jboss配置,还会上传到服务器上了。 orcale建表,基础连接。连接其它非本地的数据库 新闻发布的初步研究,property,sqlS

工作第三天

友情链接的后台管理功能 网站的基本功能javabean连接的是oracle. 知道怎么连接远程的Oracle,和添加sequence来自动增加序列。

AWT图形用户界面设计之一(FramePanel)

AWT图形用户界面设计之一(Frame&Panel) 1 用AWT生成图形化用户界面  抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立图形用户界面GUI (Graphics User Interface)工具集,AWT可用于Java的applet和applications中。它支持图形用户界面…

AWT图形用户界面设计之二(布局管理器1)

2. BorderLayout  BorderLayout 是Window,Frame和Dialog的缺省布局管理器。BorderLayout布局管理器把容器分成5个区域:North,South,East,West和Center,每个区域只能放置一个组件。各个区域的位置及大小如…

AWT图形用户界面设计(布局管理器2)

4. CardLayout CardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间,它把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件,当然每层都可以利用Panel来实现复杂的用户界面。牌布…

Thread,sleep,Runnable,run,start;

public class myThread extends Thread {private String who;public myThread(String str){whostr; }public void run(){for(int i0;i<5;i){try{sleep(10);}catch(InterruptedException e){System.out.println(who"_正在运行");}System.out.println(who"幸…

awt 容器有布局,再add组件,线程,(举例:烟花)

awt 容器有布局&#xff0c;再add组件&#xff0c;线程&#xff0c;(举例&#xff1a;烟花) 组件&#xff1b; 容器(Container)也是一个类&#xff0c;实际上是Component的子类&#xff0c;因此容器本身也是一个组件&#xff0c;具有组件的所有性质&#xff0c;但是它的主要功能…