通过多线程,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数据库,嗯~

最新文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(55)-工作流设计-表单布局
  2. linux下ftp配置文件详解
  3. TeamCity : 安装 Agent
  4. SQL 语句格式
  5. js 静态私有变量
  6. ITer的七夕节,你的情人在哪里(2015-08-19)
  7. Java:多线程&lt;三&gt;死锁、线程间通讯
  8. PAT乙级 1028. 人口普查(20)
  9. C# 乘法口诀表的实现方法
  10. javascript中的 &quot;==&quot;
  11. [PWA] 12. Intro to IndexedDB
  12. POJ-2240
  13. 高效的jQuery代码编写技巧总结
  14. GridView 设置背景透明以及Item的点击动画
  15. python matplotlib 简单生成图
  16. Linux下的tar压缩解压缩命令详解(转)
  17. Java数据结构与算法结构图
  18. cxGrid导出Excel货币符号问题
  19. Levmar 配置
  20. Linux 下mysql的定时备份

热门文章

  1. Office 365 共享链接直接进入编辑
  2. POJ - 1984 Navigation Nightmare 种类并查集
  3. SQL总结手册
  4. 终于,我也要出一本C#的书了 - 我的写作历程与C#书单推荐
  5. java 集合框架(十四)Queue
  6. 一句python,一句R︱模块导入与查看、数据读写出入、数据查看函数、数据类型、遍历文件
  7. java中final和static
  8. 检测dll是32/64位 ?
  9. Duplicate &lt;http&gt; element detected
  10. Java和Flex整合报错(一)