zoukankan      html  css  js  c++  java
  • C#中的多线程与线程互斥

    通过多线程,C#可以并行地执行代码。

    每一个线程都有它独立的执行路径,所有线程都能访问共有变量。

    这就引发了线程竞争

    这时就需要使用线程安全的处理方式使得线程互斥

    先来看一段多线程代码

    using System;
    using System.Timers;
    using System.Threading;

    public class MultiThread{
         static string str = " ";

        public static void Main(string[] args) {
             Thread t1 = new Thread(Add1);
             t1.Start();
             Thread t2 = new Thread(Add2);
             t2.Start();
             Thread.Sleep(1000);
             Console.WriteLine(str);
         }

        public static void Add1() {
             for (int i = 0; i < 10; i++) {
                 Thread.Sleep(10);
                 str += "1";
             }
         }

        public static void Add2()
         {
             for (int i = 0; i < 10; i++)
             {
                 Thread.Sleep(10);
                 str += "2";
             }
         }
    }

    线程Add1和线程Add2并行执行

    因而变量str被两个线程同时操作

    为了避免此线程竞争

    可以通过加锁(lock)的方法解决

    当两个线程争夺一个锁的时候,一个线程获得锁资源,另一个线程则等待

    在不确定的多线程环境中代码以此方式处理被叫做线程安全

    加锁后代码:

    public static void Add1()
         {
             lock (str)
             {
                 for (int i = 0; i < 10; i++)
                 {
                     Thread.Sleep(10);
                     str += "1";
                 }
             }
         }

        public static void Add2()
         {
             lock (str)
             {
                 for (int i = 0; i < 10; i++)
                 {
                     Thread.Sleep(10);
                     str += "2";
                 }
             }
         }

    明天总结Unity服务端连接MySql数据库,嗯~

  • 相关阅读:
    Error: unable to load xmlsec-openssl library
    count(1)、count(*)与count(列名)的执行区别
    Linux下的压缩zip,解压缩unzip命令详解及实例
    linux centos 如何查看操作系统版本信息
    These dependencies were not found: *!!vue-style-loader!css-loader?
    Git如何永久删除某个重要文件文件或文件夹 (包括历史记录) 强制
    LDAP的filter查询详解
    详谈mysqldump数据导出的问题
    GO -- 遍历删除 数组 slice
    mjml强大&&灵活的邮件模版引擎
  • 原文地址:https://www.cnblogs.com/fws94/p/7112096.html
Copyright © 2011-2022 走看看