zoukankan      html  css  js  c++  java
  • 线程一(lock)

      对于线程同步操作最简单的一种方式就是使用 lock 关键字,通过 lock 关键字能保证加锁的线程只有在执行完成后才能执行其他线程。

       lock 的语法形式如下。

       lock(object)
       {
           //临界区代码
       }

      这里 lock 后面通常是一个 Object 类型的值,也可以使用 this 关键字来表示。

      最好是在 lock 中使用私有的非静态成员变量或私有的静态成员变量,即使用 Private 或 Private static 修饰的成员

      例如:

      private Object obj = new Object();
      lock (obj)
      {
          //临界区代码
      }

     

     

    【实例】创建控制台应用程序,使用 lock 关键字控制打印奇数和偶数的线程,要求先执行奇数线程,再执行偶数线程。

      根据题目要求,代码如下。

    class Program
    {
        public void PrintEven()
        {
            lock (this)
            {
                for(int i = 0; i <= 10; i = i + 2)
                {
                    Console.WriteLine(Thread.CurrentThread.Name + "--" + i);
                }
            }
        }
        public void PrintOdd()
        {
            lock (this)
            {
                for(int i = 1; i <= 10; i = i + 2)
                {
                    Console.WriteLine(Thread.CurrentThread.Name + "--" + i);
                }
            }
        }
        static void Main(string[] args)
        {
         //注:这样调用是错误的
         //Thread t1 = new Thread(new ThreadStart(new Program().PrintOdd));
         //Thraed t2 = new Thread(new ThreadStart(new Program().PrintEven));
         //两次new Program类对象,会造成lock的this对象不同,无法锁定。
    Program program = new Program(); ThreadStart ts1 = new ThreadStart(program.PrintOdd); Thread t1 = new Thread(ts1); t1.Name = "打印奇数的线程"; t1.Start(); ThreadStart ts2 = new ThreadStart(program.PrintEven); Thread t2 = new Thread(ts2); t2.Name = "打印偶数的线程"; t2.Start(); } }


    http://c.biancheng.net/view/2999.html
  • 相关阅读:
    mysql之安装和配置(一)
    linux之cron定时任务介绍
    redis基础之开机自启动和监听(二)
    linux内网穿透自启动配置
    mysql 之修改初始密码
    Oracle-Linux安装配置python3.6环境
    redis基础之python连接redis(五)
    /etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc 文件的作用
    CentOS yum的详细使用方法
    9.2、面向对象:继承、多态
  • 原文地址:https://www.cnblogs.com/lu-yuan/p/11377219.html
Copyright © 2011-2022 走看看