(一).描述
此示例演示分别用lock以及Interlocked和Monitor类实现线程的临界区操作(互斥)
(二).代码
using System;
using System.Threading;
using System.Collections;
namespace 加锁_实现临界区互斥操作_
{
//委托声明(函数签名)
delegate string MyMethodDelegate();
class MyClass
{
private static ArrayList arrList = new ArrayList();
private static int i = 0;
public static void Add()
{
//方法一:用 lock 实现
// lock(arrList)
// {
// arrList.Add(i.ToString());
// i++;
// }
//方法二: 用Interlicked类实现
// System.Threading.Interlocked.Increment(ref i);
// arrList.Add(i.ToString());
//方法三: 用Monitor类实现
try
{
//I.不限时间
//stem.Threading.Monitor.Enter(arrList);
//II.在指定时间获得排他锁
if(System.Threading.Monitor.TryEnter(arrList,TimeSpan.FromSeconds(30))) //在30秒内获取对象排他锁. 灵活运用可以实现防止死锁功能
{ //避免互相等待情况。 在一定时间内得不到排他锁,可能是自己
//占用其它排它锁造成的(别的正在等自己正占用的排它锁,而处于等待状态),
//这时可以释放掉自己正占用的排他锁后,再试图去得到想要的对象的排他锁
arrList.Add(i.ToString());
i++;
}
}
catch
{
//发生异常后自定义错误处理代码
}
finally
{
Monitor.Exit(arrList); //不管是正常还是发生错误,都得释放对象
}
}
[STAThread]
static void Main(string[] args)
{
Thread thread1 = new Thread(new ThreadStart(Add));
Thread thread2 = new Thread(new ThreadStart(Add));
Thread thread3 = new Thread(new ThreadStart(Add));
thread1.Start();
thread2.Start();
thread3.Start();
Console.Read();
for(int i=0;i
{
Console.WriteLine(arrList[i].ToString());
}
Console.Read();
}
}
}
本示例代码已经测试,能够正常运行!
(三).示例下载
http://www.cnblogs.com/Files/ChengKing/ThreadExample.rar
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=540644
文章浏览阅读2.6k次,点赞6次,收藏14次。ArcGIS Pro实践二:基于核密度构建时空体素Step1:核密度分析Step2:构建镶嵌数据集Step3:多维处理Step4:可视化Step5:剖切分析非GIS专业,仅用作自己实操的记录。欢迎大佬批评指正,交流更好的方法~相关知识:1. 什么是体素图层?ArcGIS Pro 文档2. 时态GIS数据模型(麻辣GIS)3. 通过多维栅格图层创建时空立方体 (时空模式挖掘) ArcGIS Pro 文档本文构建的体素模型如下:(图源:链接1)需要注意的是:输入多维栅格图层必须至少有 10 个时_arcgispro核密度三维可视化
文章浏览阅读719次。新手使用github常见问题1: 提交代码Contribution数量没有增加出现这种情况,大都是因为github上的邮箱和本地提交代码的邮箱不一致,解决查看本地邮箱和用户git config user.namegit config user.email如果发现不一致,修改本项目的邮箱和账户即可对本项目生效,一般修改项目内的就可以,没必要修改家目录下的.gitconfig文件。..._githup. danger zone
文章浏览阅读121次。查理芒格说:我的剑传给能够挥舞它的人。查理芒格有三条异于常人之处,值得我们深思。决心致富过上想要的生活查理芒格说:“走到人生的某一个阶段时,我决心要成为一个富有之人。这并不是因为爱钱的缘故,而是为了追求那种独立自主的感觉。”查理芒格坦承自己和巴菲特一样有很强的致富欲望,不是因为自己喜欢法拉利什么,而是自己喜欢独立,极度渴望独立。他在32岁之前经历了无数坎坷,年少时经历了经济大萧条,随后又经历了婚姻...
文章浏览阅读161次。输入格式:输入第1行给出正整数K (≤100000);第2行给出K个整数,其间以空格分隔。标题输出格式:在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。输入样例:6-2 11 -4 13 -5 -2输出样例:20题解#include <iostream>#include<cstdio>using namespace std;int M..._输出格式: 在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。 输入
文章浏览阅读1k次。简介 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议(Binary),因为采用的是二进制协议,所以它很适合于发送二进制数据。Hessian通常通过Web应用来提供服务,因此非常类似于WebService。只是它不使用SOAP协议。 Hessian通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。Spring的Dispatche_使用hessian的好处是什么
文章浏览阅读600次。今天写一个关于二维码支付的时候遇到了一个问题,使用苹果提供的CIFilter 和CIContext 时 报了一个 很坑爹的错误 ,错误如下:Undefined symbols for architecture x86_64:"_OBJC_CLASS_$_CIContext", referenced from:objc-class-ref in ErWeiMaViewCo__objc_class_$_cifilter", referenced from:
文章浏览阅读982次。1. 乱码文件为何会生成乱码文件?原因很多,在上传的过程中编码不对,操作提供不支持该编码等,如果你尝试用Java的File对象去删除文件,甚至判断是否存在该文件都会发现返回的都是FalseString[]entries = file.list(); for(String s: entries){ File currentFile = new File(file.getPa..._java中删除文件时文件名乱码问题
文章浏览阅读1.4k次。// 获取运行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();这行代码会返回一个可用的执行环境,是flink程序执行的上下文,记录了相关配,如并行度等,并提供了一系列方法,如输入流的读入方法,运行整个程序的execute方法等,对于分步式流处理程序来说,flatM..._executionenvironment获取当前目录
文章浏览阅读1k次。Android第三方弹出框Sweet Alert Dialog学习关于关于_android 三方弹框
文章浏览阅读2.4w次,点赞12次,收藏37次。官方介绍原文请移步:http://tools.android.com/tips/lintLint简介Android lint是在ADT16提供的新工具,它是一个代码扫描工具,能够帮助我们识别资源、代码结构存在的问题。Lint优化哪些问题遗漏的翻译(没用上的翻译)比如国际化未被翻译的字段值布局性能(以前是 layoutopt工具,可以解决无用布局、嵌套太多、布局太多)未使用..._android 命令打包关闭lint
文章浏览阅读476次。我们都知道文字一般用sp,很少用xp,然而一旦用sp标注文字的大小当系统的文字大小切换时,app文字也跟着切换会导致布局问题,因此为保持文字不变,可以在baseActivty 中重写一下方法,它会在onCreat 调用,重新初始化文字大小,就不会文字变化。/*** 设置为默认的系统标准字体,不可更改*/@Overridepublic Resources _app缺陷文字错乱
文章浏览阅读1.4k次,点赞23次,收藏24次。一主两从三哨兵集群,当master节点宕机时,通过哨兵(sentinel)重新推选出新的master节点,保证集群的可用性。_windows redis集群搭建一主两从