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

  • 相关阅读:
    pandas高效实现条件逻辑
    Python教程:文件、异常处理和其他
    最终初学者指南,以数据科学用例赢得分类黑客马拉松
    用Nvidia Jetson Nano 2GB和Python构建一个价值60美元的人脸识别系统
    一幅图像能顶16x16字!——用于大规模图像缩放识别的变压器(对ICLR 2021年论文的简要回顾)
    接缝雕刻算法:一种看似不可能的图像大小调整方法
    apache与nginx的优缺点的比较
    php5与php7的区别
    git基本的命令大全
    redis和membercache的区别
  • 原文地址:https://www.cnblogs.com/fws94/p/7112096.html
Copyright © 2011-2022 走看看