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