C#开发之多线程数据同步
来源:互联网 发布:ubuntu怎么读 编辑:程序博客网 时间:2024/05/01 09:07
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率.
实例讲解:
在一个例子中,由函数add实现一数据的增加,delete实现该数据的减少,如果多线程同时操作该数据时,会出现增加的同时减少操作,这样很可能会出现增加没有完成时,最后只完成了数据的减少操作。
看例子:
private int count = 12; public void add() { Console.WriteLine("add方法前" + count); count += 2; Console.WriteLine("add方法后" + count); } public void delete() { Console.WriteLine("delete方法前" + count); count -= 2; Console.WriteLine("delete方法后" + count); }private void button5_Click(object sender, EventArgs e) { //线程同步 Thread[] t = new Thread[10]; for(int i = 0; i < t.Length; i++) { if(i % 2 == 0) { t[i] = new Thread(new ThreadStart(add)); } else { t[i] = new Thread(new ThreadStart(delete)); } } for(int i = 0; i < t.Length; i++) { t[i].Start(); } }
以上代码会出现数据不同步现象,贴图显示:
在C#里面用于实现线程同步的常用类有如下几类:
1、Mutex类(互斥器),Monitor类,lock方法
2、ManualResetEvent类,AutoResetEvent类(这两个都是由EventWaitHandle类派生出来的)
3、ReaderWriterLock类
C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。
下面只用到Lock方法:
这样修改后,即可,只需要修改调用的方法即可,在线程创建和执行时与之前没有差别:
private static object myLock = new object(); private int count = 12; public void add() { lock(myLock) { Console.WriteLine("add方法前" + count); count += 2; Console.WriteLine("add方法后" + count); } } public void delete() { lock(myLock) { Console.WriteLine("delete方法前" + count); count -= 2; Console.WriteLine("delete方法后" + count); } }
- C#开发之多线程数据同步
- Java 之多线程同步
- c#之多线程基本概念
- Java回顾之多线程同步
- C#学习之多线程开发技术(一)
- C#学习之多线程开发技术(二)
- C#学习之多线程开发技术(三)
- C#学习之多线程开发技术(四)
- C#学习之多线程开发技术(五)
- C#学习之多线程开发技术(六)
- C#学习之多线程开发技术(七)
- C#学习之多线程开发技术(八)
- C#学习之多线程开发技术(九)
- C#学习之多线程开发技术(十)
- C#学习之多线程开发技术(十一)
- C#学习之多线程开发技术(十二)
- C#学习之多线程开发技术(十三)
- C#学习之多线程开发技术(十四)
- 实用SQL语句大全
- 背包九讲
- C Programming Language 1-16
- JavaScript语法入门系列(六) 循环语句
- c++之文件操作,(不以简单而不为,不以难而畏为)
- C#开发之多线程数据同步
- Box2D v2.1.0用户手册翻译 - 第08章 关节(Joints)
- 管理谏言
- 更换 ubuntu 语言环境
- 初识vb数据库开发之实例2(创建记录浏览窗口)
- 【C和指针】const指针
- Struts2_学习笔记(一)--------学习工具下载、HelloWorld、运行机制
- JavaScript语法入门系列(四) 运算符
- 常用控件 05 单选按钮 Radio Buttons