C#中的lock、Monitor、Mutex学习笔记

2019-12-26 12:18:20于海丽
易采站长站为您分析C#中的lock、Monitor、Mutex学习笔记,本文讲解的都是线程同步的一些知识,需要的朋友可以参考下    

线程:线程是进程的独立执行单元,每一个进程都有一个主线程,除了主线程可以包含其他的线程。

多线程的意义:多线程有助于改善程序的总体响应性,提高CPU的效率。

多线程的应用程序域是相当不稳定的,因为多个线程在同一时间内都能运行共享的功能模块。为了保护应用程序的资源不被破坏,为多线程程序提供了三种加锁的机制,分别是:Monitor类、Lock关键字和Mutex类。

1. lock

lock实现的功能是:使后进入的线程不会中断当前的线程,而是等待当前线程结束后再继续执行。

应用:

复制代码
   private Object thisLock=new object();

 

   lock(thisLock){
               //锁定的代码块
    }

 

注意:避免锁定 public 类型,否则实例将超出代码的控制范围。

常见的结构 lock (this)、lock (typeof (MyType)) 和 lock ("myLock")
违反此准则:如果实例可以被公共访问,将出现 lock (this) 问题。
如果 MyType 可以被公共访问,将出现 lock (typeof (MyType)) 问题。
由于进程中使用同一字符串的任何其他代码将共享同一个锁,所以出现 lock(“myLock”) 问题。
最佳做法是定义 private 对象来锁定, 或 private static 对象变量来保护所有实例所共有的数据。
下面举例说明lock的应用:
下面的例子中创建了5个次线程,次线程完成的任务就是:输出线程编码,延迟1秒,然后输出当时的时间

Example:

 

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

 

namespace ConsoleApplication5 {
    class Program {
        static void Main(string[] args) {
        Console.WriteLine ("程序开始时间:"+DateTime.Now .ToString());