ReleaseMutex用法

ReleaseMutex用法Mutex中提供了WiteOne,ReleaseMutex两个实例方法~WiteOne的作用是”阻塞当前线程,提供对该线程的原子操作”也就是说当一个线程遇到WiteOne的时候,如果在WiteOne里面没有线程在操作,则此线程进去操作而里面有线程的时候,所有到此的线程均需要排队等候里面的线程执行完毕~而控制这样操作的结束标记就是使用ReleaseMutex方法!就好比WiteO…

大家好,又见面了,我是你们的朋友全栈君。

Mutex中提供了WiteOne,ReleaseMutex 两个实例方法~

WiteOne的作用是”阻塞当前线程,提供对该线程的原子操作”

也就是说当一个线程遇到WiteOne的时候,如果在WiteOne里面没有线程在操作,则此线程进去操作

而里面有线程的时候,所有到此的线程均需要排队等候里面的线程执行完毕~

而控制这样操作的结束标记就是使用ReleaseMutex 方法!

就好比WiteOne是一把锁一样~而ReleaseMutex 就是一把钥匙

当10个人都看到这个门的时候,第一个到达门口的人会看到屋子里没有人,则他进去,同时会把门锁上~

后面的人自然要在门口等候,当此人在屋子里执行完任务后他会用钥匙把门打开!

出去后把锁交给门口排队的第二位同志,第二位同志再做同样的操作

如果第一位同志执行完任务以后不把使用权交给第二个人的话,而直接退出

那么屋子自然就空了下来,而门还是锁的~不必担心~门会自动打开,只要是前一个人已经不在屋子里即可~

然后再来说说这个Interlocked,官方说明是”对一个变量进行原子操作进行递增或者递减然后保存”

原子操作的概念就是,有且只有一个线程在对此变量进行操作~不准其他线程干预的操作

当对一个变量进行原子操作的时候,此变量就会加锁,而其他线程是无法访问的,只能挂起等候此变量解锁

我感觉实际上使用的也就是Mutex来实现的

好了开始说说具体的实现吧

public class MutexTest
{

private static int poolFlag = 0 ;//标记
private const int amountThread = 10 ;//线程总量
private const int maxThread = 3 ;//可执行线程最大数量
private static Mutex muxConsole = new Mutex() ;

public static void Main()
{

for ( int i = 0 ; i < amountThread ; i ++ )
{

// 创建指定数量的线程
// 是线程调用Run方法
// 启动线程
Thread trd = new Thread( new ThreadStart( Run ) ) ;
trd.Name = “线程” + i ;
trd.Start() ;
}
}

public static void Run()
{

muxConsole.WaitOne(); //阻塞队列
Interlocked.Increment(ref poolFlag) ; //标记+1
if (poolFlag != maxThread) //判断是否等于上限
muxConsole.ReleaseMutex(); //如果此线程达不到可执行线程上限,则继续开通,让后面的线程进来
Console.WriteLine( “{0} 正在运行……\n”, Thread.CurrentThread.Name ) ;
Thread.Sleep( 5000 ); //模拟执行
Console.WriteLine( “{0} 已经中止……\n”, Thread.CurrentThread.Name ) ;

//标记-1
Interlocked.Decrement(ref poolFlag) ;
}
}

 

另外一种,放在 WaitForSingleObject后面 直到不再需要保护参数为止 如 要保护全局 int a; 线程1 { WaitforsingleObject....... //等待获得对a的写的权利 a++ //保护部分 ReleaseMutex...... //不需要保护了 允许其它线程写a } 线程2 { WaitforsingleObject....... //等待获得对a的写的权利 a++ //保护部分 ReleaseMutex...... //不需要保护了 允许其它线程写a }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/153164.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Redis的雪崩,击穿,穿透详解「建议收藏」

    Redis的雪崩,击穿,穿透详解「建议收藏」在今天的互联网里,高并发、大数据量、大流量已经成为了代言词,那么我们的系统也承受着巨大的压力,首当其冲的解决方案就是redis。那么redis使用不当就会产生雪崩、穿透、击穿等问题,这也是考验一个程序员技术能力的时刻。当然面试的时候,这也是高频面试题,几乎大厂都会问到。下面跟着贴心老哥一起来看看这些技术吧。缓存雪崩举例双十一期间,所有用户一打开淘宝就是进入首页,首页的压力非常大,为了提高并发,将网站首页数据都缓存到redis里,所有的rediskey失效时间都是3小时。双十一当天大量

  • Vue分页导航_vue分页组件

    Vue分页导航_vue分页组件Vue分页导航原文链接:https://www.cnblogs.com/vivaxiaonan/p/9987985.html这里我用的是脚手架,粘Viva_nan大佬的代码封装了一个.vue组件。实现效果如下:封装组件newCom.vue代码:<template><divclass=”wrapper”><navclass=”zpagenav”><ulclass=”page-ul”>…

  • 嵌入式(二)——Jlink接口定义「建议收藏」

    嵌入式(二)——Jlink接口定义「建议收藏」我真的是太容易忘了,所以在这里存一下。这是一张不记得从那里搞来的n手图。

  • java帝国时代_我的第一个java程序

    java帝国时代_我的第一个java程序1C语言帝国的统治现在是公元1995年,C语言帝国已经统治了我们20多年,实在是太久了。1972年,随着C语言的诞生和Unix的问世,帝国迅速建立统治,从北美到欧洲,从欧洲到亚洲,无数程序员臣服在他的脚下。帝国给我们提供了极好的福利:贴近硬件,运行极快,效率极高。使用这些福利,程序员们用C开发了很多系统级软件,操作系统,编译器,数据库,网络

  • 保研面试/考研复试:英语口语面试必备话题及常用句型句式整理(一)[通俗易懂]

    目录StudiesAFFIRMATIVENEGATIVEWorkForAgainstHometownAFFIRMATIVENEGATIVESportFORAGAINSTStudiesAFFIRMATIVEMyuniversityhasagreatreputation.Thisisaprettypromisingfield.Itenablesmetofulfillmypotential.Myprofessorsarereallythoughtfuland

  • BP神经网络算法_bp神经网络算法流程图

    BP神经网络算法_bp神经网络算法流程图1、前馈神经网络、反馈神经网络、BP网络等,他们之间的关系前馈型神经网络:取连续或离散变量,一般不考虑输出与输入在时间上的滞后效应,只表达输出与输入的映射关系;在此种神经网络中,各神经元从输入层开始,接收前一级输入,并输入到下一级,直至输出层。整个网络中无反馈,可用一个有向无环图表示。常见的前馈神经网络有感知机(Perceptrons)、BP(BackPropagation)网络、RBF(

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号