amazement的用法_release的用法

amazement的用法_release的用法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/124897.html原文链接:https://javaforall.cn

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

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

(0)


相关推荐

  • 云服务器搭建java服务器运行环境

    云服务器搭建java服务器运行环境文章目录安装jdk解压jdk配置环境变量安装tomcattomcat开机自启安装MySQL安装MySQL开机启动启动mysql服务配置mysql如果运行上面的命令中途发生错误:`ERROR1558(HY000):Columncountofmysql.useriswrong.Expected43,found39.`进入mysql安装jdk先下载jdklinux版本,点…

  • 云服务器续费太贵,直接在家搭一台,再也不受约束了

    云服务器续费太贵,直接在家搭一台,再也不受约束了杀熟,劳神伤财,废旧利用,性能对比,费用,灵活性,优化,缺点,开机吧,少年,局域网访问,外网访问最终迁移

  • python基础(3)列表list[通俗易懂]

    python基础(3)列表list[通俗易懂]列表列表特点:是一种序列结构,与元组不同,列表具有可变性,可以追加、插入、删除、替换列表中的元素新增元素appendappend添加一个对象,可以是任意类型a=['zhangsa

  • cpu后缀含义「建议收藏」

    cpu后缀含义「建议收藏」一、台式cpu后缀含义1、Intelcpu后缀+X:极致性能处理器,价格不菲,散热惊人,性能至上。后缀+K:不锁倍频处理器,可超频。(游戏用)后缀+F:无内置核心显卡处理器,需要搭配独立显卡。(省钱游戏用)后缀+E:嵌入式工程级处理器。(一般用不到)后缀+S、T:S代表功耗65w,T代表功45w或更低。(一般用不到)2、AMDcpu后缀+K:不锁倍频处理器,可超频。…

  • php.ini中allow_url_fopen和allow_url_include的设置

    php.ini中allow_url_fopen和allow_url_include的设置all_url_include在php5.2以后添加,安全方便的设置(php的默认设置)为:allow_url_fopen=on;all_url_include=off;allow_url_fopen=On(允许打开URL文件,预设启用)allow_url_fopen=Off(禁止打开URL文件)allow_url_include=Off(禁止引用URL文件,新版增加功能…

  • idea正则表达式替换(idea正则搜索)

    待替换代码如下(ledger.getPrinciple().intValue()*100)需要替换成((int)(ledger.getPrinciple()*100))我们需要怎么做呢?ctrl+r打开文件替换勾选替换选项Regex待匹配行正则表达式逐步分解首先我们看到有三个括号,一个*100,于是有了\(\(\))\(\)\*100\),特殊字符…

发表回复

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

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