lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。

class Program
{
static void Main(string[] args)
{
Thread t = new Thread(LockObject.MonitorIncrement);
Thread t1=new Thread(new ThreadStart(LockObject.LockIncrement));
t.Start();
t1.Start();
}
} public class LockObject
{
/// <summary>
/// 多线程共享数据
/// </summary>
private static int counter = ;
/// <summary>
/// 同步对象,推荐这种写法
/// 应避免锁定 public 类型,否则实例将超出代码的控制范围
/// 具体如:lock (this)、lock (typeof (MyType)) 和 lock ("myLock")
/// </summary>
private readonly static object synisynchronize = new object(); public static void MonitorIncrement()
{
///Monitor.Enter 与 Monitor.Exit 相当于Lock
Monitor.Enter(synisynchronize);
Thread.Sleep();
counter++;
Console.WriteLine("MonitorIncrement counter={0}", counter);
Monitor.Exit(synisynchronize);
} public static void LockIncrement()
{
///lock在开始时调用 Monitor.Enter
///在结束时调用 Monitor.Exit 。
lock (synisynchronize)
{
counter++;
Console.WriteLine("LockIncrement counter={0}" ,counter);
}
}
}

运行结果如下图示:

aaarticlea/png;base64,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" alt="" />

C#之Lock的更多相关文章

  1. C#各种同步方法 lock, Monitor,Mutex, Semaphore, Interlocked, ReaderWriterLock,AutoResetEvent, ManualResetEvent

    看下组织结构: System.Object System.MarshalByRefObject System.Threading.WaitHandle System.Threading.Mutex S ...

  2. 多线程同步工具——Lock

    本文原创,转载请注明出处. 参考文章: <"JUC锁"03之 公平锁(一)> <"JUC锁"03之 公平锁(二)> 锁分独占锁与共享锁, ...

  3. java 线程 Lock 锁使用Condition实现线程的等待(await)与通知(signal)

    一.Condition 类 在前面我们学习与synchronized锁配合的线程等待(Object.wait)与线程通知(Object.notify),那么对于JDK1.5 的 java.util.c ...

  4. InnoDB:Lock & Transaction

    InnoDB 是一个支持事务的Engine,要保证事务ACID,必然会用到Lock.就像在Java编程一下,要保证数据的线程安全性,必然会用到Lock.了解Lock,Transaction可以帮助sq ...

  5. 使用四元数解决万向节锁(Gimbal Lock)问题

    问题 使用四元数可以解决万向节锁的问题,但是我在实际使用中出现问题:我设计了一个程序,显示一个三维物体,用户可以输入绕zyx三个轴进行旋转的指令,物体进行相应的转动. 由于用户输入的是绕三个轴旋转的角 ...

  6. 万向节锁(Gimbal Lock)的理解

    [TOC] 结论 我直接抛出结论: Gimbal Lock 产生的原因不是欧拉角也不是旋转顺序,而是我們的思维方式和程序的执行逻辑没有对应,也就是说是我们的观念导致这个情况的发生. 他人解释 首先我们 ...

  7. 在多线程编程中lock(string){...}隐藏的机关

    常见误用场景:在订单支付环节中,为了防止用户不小心多次点击支付按钮而导致的订单重复支付问题,我们用 lock(订单号) 来保证对该订单的操作同时只允许一个线程执行. 这样的想法很好,至少比 lock( ...

  8. 谈谈 Lock

    上来先看MSDN关于lock的叙述: lock  关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁.  下面的示例包含一个 lock 语句. lock  关键字可确保当一 ...

  9. LOCK TABLES和UNLOCK TABLES与Transactions的交互

    LOCK TABLES对事务不安全,并且在试图锁定表之前隐式提交任何活动事务. UNLOCK TABLES只有在LOCK TABLES已经获取到表锁时,会隐式提交任何活动事务.对于下面的一组语句,UN ...

  10. SQL 性能调优中可参考的几类Lock Wait

    在我们的系统出现性能问题时,往往避不开调查各种类型 Lock Wait,如Row Lock Wait.Page Lock Wait.Page IO Latch Wait等.从中找出可能的异常等待,为性 ...

随机推荐

  1. 解决小米、红米及其他 Android 手机无法在 Mac 下进行真机调试的问题(转)

    转自:http://ju.outofmemory.cn/entry/103522 Begin iOS 2014-08-19 271 阅读 手机 Android 小米 mac 调试 在 Mac OSX ...

  2. 关于url中的#-----hash

    前言:不知道你们对url地址中的#一开始是怎么理解的,反正我以前一直都是默认那就是本页面中该id的位置.今天看了篇文章,才把这个真正透彻理解. 1,#涵义 #代表网页中的一个位置.其右面的字符,就是该 ...

  3. Express+mysql的博客(1)

    学了东西一定要自己上手试过才知道是不是真的会了.一直想练练node的使用,本来也没有什么好想法的,经同学提醒了一下,发现其实我可以用node写一个博客.我同学说工作量会非常之大╮(╯_╰)╭那也得先试 ...

  4. 使用时间戳和sequence生成主键的function

    create or replace function fn_getKeyreturn varchar2is  k varchar2(30);begin  select to_char(sysdate, ...

  5. 流媒体测试笔记记录之————阿里云监控、OBS、FFmpeg拉流和推流变化比较记录

    OBS设置视频(512kbps)和音频(128kbps)比特率 阿里云监控结果: 使用FFmpeg拉流到Nginx 服务器测试比特率 第二次测试,修改视频和音频比特率 OBS设置 阿里云监控 Ngin ...

  6. Lambda表达式遍历集合

    1.Collection Java 8 为Iterable接口新增了一个forEach(Consumer action)默认方法,该方法所需参数的类型是一个函数式接口,而Iterable接口是Coll ...

  7. 准循环LDPC码用于公钥密码时的奇偶校验矩阵

    设H为奇偶校验矩阵,其行权重为d.Q为转置矩阵,其行权重为m.对于LDPC码,有d/n<< 1, m/n< 1. H´=H·QT是用于公钥密码的奇偶校验矩阵.它不是老密码G的奇偶校验 ...

  8. Goppa code

    上面的公式定义了长度为n的Goppa码[1].n=2^m, 其维度 k≥n- t·m. 最小距离d≥ 2t+1. 存在运行时间与 n·t 成正比的快速译码算法. 从形式上看,右边是分式,相当于线性分组 ...

  9. contiki-断点的保存和恢复

    保存断点 保存断点是通过保存行数来完成的,在被中断的地方插入编译器关键字_LINE_,编译器便自动记录所终端的行数.展开那些具有中断功能的宏,可以发现最后保存行数是宏LC_SET,取宏PROCESS_ ...

  10. 还有 3 天,苹果就要关上 HTTP 大门了

    版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/274113001482113656 来源:腾云阁 h ...