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数据库,嗯~

  • 相关阅读:
    Generate Parentheses (Java)
    leetcode15
    MD5
    leetcode409
    Vue第一个简单的例子
    SpringBoot和Ajax通信
    如何使用安装光盘为本机创建yum repository
    Less known Solaris features: svccfg editprop (ZT)
    Rename Oracle Managed File (OMF) datafiles in ASM(ZT)
    跨数据文件删除flashback database
  • 原文地址:https://www.cnblogs.com/fws94/p/7112096.html
Copyright © 2011-2022 走看看