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

  • 相关阅读:
    http 事务
    URI、URL、URN
    媒体类型(MIME类型)
    资源
    WEB客户端和服务器
    如何解决新浪微博返回结果中的中文编码问题
    新浪微博 使用OAuth2.0调用API
    新浪微博 授权机制研究
    hmac库 密钥相关的哈希运算消息认证码
    ValueError: Expecting property name: line 1 column 1 (char 1)
  • 原文地址:https://www.cnblogs.com/fws94/p/7112096.html
Copyright © 2020-2023  润新知