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

  • 相关阅读:
    LOJ #6669 Nauuo and Binary Tree (交互题、树链剖分)
    BZOJ 4734 UOJ #269 [清华集训2016]如何优雅地求和 (多项式)
    UOJ #268 BZOJ 4732 [清华集训2016]数据交互 (树链剖分、线段树)
    Codeforces 1276C/1277F/1259F Beautiful Rectangle (构造)
    UOJ #164 [清华集训2015]V (线段树)
    python – time.sleep – 睡眠线程
    GIL(全局解释器锁)与互斥锁
    python theading线程开发与加锁、信号量、事件等详解
    python装饰器概念与应用
    python中for循环的底层实现机制 迭代
  • 原文地址:https://www.cnblogs.com/fws94/p/7112096.html
Copyright © 2011-2022 走看看