- 浏览: 1079002 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (399)
- C++ (39)
- Java (74)
- Java界面开发学习笔记 (4)
- Java用户的c++之旅 (0)
- 自言自语 (12)
- DSP (1)
- MCU (0)
- CG (0)
- Jabber (0)
- Gloox (0)
- Linux (11)
- Windows (19)
- Networks (4)
- Jobs (0)
- PHP (1)
- JSP (2)
- 生活 (35)
- C (2)
- Qt4 (2)
- C# (50)
- WPF (5)
- ASP (2)
- FLEX (47)
- SQL (20)
- JavaScript (12)
- SharePoint (6)
- GWT (1)
- Dojo (9)
- HTML (11)
- Others (7)
- 如何安装配置系列 (7)
- UML (2)
- Android (3)
- alibaba (1)
最新评论
-
zxjlwt:
学习了http://surenpi.com
Firefox插件开发: Hello World! -
ylldzz:
楼主知道MVEL怎么调试么
MVEL简介及快速使用 -
blueman2012:
您好,可否提供源码下载,我把您的代码贴过来后,好多报错的,谢谢 ...
Log4J日志解析 -
svygh123:
你的游标都没有关闭呢!
MYSQL游标嵌套循环示例 -
dizh:
写的很好啊
MVEL简介及快速使用
与多线程相关的两个常见的需要解决的问题是:临界资源保护和线程间的同步依赖,每一种语言都提供了自己的一套设施(有的语言可能需要借助OS的API)来解决这两个问题,C#提供了更方便灵活的解决方案,首先C#可以允许我们在不同的级别上加锁,也就是说我们可以控制加锁的粒度。其次,C#提供了一套内置的线程安全的容器,方便我们的使用。 注意: (4)ReaderWriterLock类 (5)ManualResetEvent (6)AutoResetEvent (2)ThreadStaticAttribute ArrayList等容器也提供类似操作。
一.不同级别(Level)上的同步:
1.object level 同步
对应的class必须从ContextBoundObject继承(同步上下文context,使所有的方法调用能被截获),并且在class上运用SynchronizationAttribute 。
2.Method level 同步
System.Runtime.CompilerService空间包含的一些属性将影响CLR在运行期间的行为。特性MethodImplAttribute可以用于需要进行同步控制的方法上。
3.code segment level 同步
(1)Monitor类(主要是静态方法)
(1)Monitor 锁定对象,只能在Enter()和Exit()之间的代码块中调用Wait和Pulse
(2)不能在一个线程中获得锁,而在另一个线程中释放锁。这样会产生锁丢失。 获得锁和释放锁应该在同一个线程中完成。
(3)lock语句
实现单写多读程序的锁。
与ManualResetEvent的区别是,AutoResetEvent.WaitOne()会自动改变事件对象的状态,即AutoResetEvent.WaitOne()每执行一次,事件的状态就改变一次。有信号-->无信号;无信号-->有信号
说明:
(1)无论是Monitor还是lock、ReaderWriterLock都只对引用类型的对象有效,因为引用类型的对象有一个隐藏的sync#字段,该字段的作用就是作为加锁的标记。
(2)上述的各种设施中,只有Monitor 和ManualResetEvent/AutoResetEvent 能解决线程间的同步依赖问题,而其它的设施主要用于解决临界资源共享。
4.member level同步
(1)Interlocked类(主要是静态方法)
同步一个由许多线程共享的变量。
该特性用于修饰静态变量,被该特性修饰的静态变量在每个线程中都有自己的副本。
二.创建线程安全的对象
转自:http://tech.it168.com/n/2007-04-27/200704271521359.shtml
发表评论
-
策略模式
2010-10-08 16:34 1176一、概念 策略模式(Strategy):它定义了一系 ... -
C#获取返回错误码
2010-05-21 17:59 1813[DllImport("TestWin32Dl ... -
VS.NET 开发Windows服务的步骤
2010-05-20 14:25 1607在很多应用中需要做windows服务来在一些后台操作,比如监视 ... -
c# 允许服务与桌面交互
2010-05-20 14:20 2708我们写一个服务,有时候要让服务启动某个应用程序,就要修 ... -
C#单例模式的三种写法
2010-05-19 15:58 48577第一种最简单,但没有考虑线程安全,在多线程时可能会出问题, ... -
C#中获取我的文档系统文件夹路径
2010-05-17 15:29 2276本技巧使用GetFolderPath方法来获取指向由指定枚 ... -
C#自定义事件的步骤介绍
2010-05-13 17:54 3301通常C#自定义事件有下面的几个步骤: ... -
使用反射机制遍历对象中的属性名及属性值
2010-05-03 16:20 2847首先描述一种情景,当给你一个VO类(这个类是映射到数据库的表 ... -
C#的逆向工程-IL指令集
2010-04-30 10:28 1690一些 IL 语言解释: ... -
使用SqlHelper时“阅读器关闭时read的尝试无效”的解决方法
2010-04-20 14:54 1821原SqlHelper类中ExecuteReader方法体 ... -
C# 删除文件夹
2009-12-31 11:28 2570/// <summary> ... -
System.Windows.Forms.Timer和System.Timers.Timer的区别 [转]
2009-12-16 23:44 5210.NET Framework里面提供了三种Timer: ... -
关于var1=var2=something赋值语句的思考
2009-11-18 16:16 1245刚才在阅读《c#本质论》一书时,开头有提到var1=var2= ... -
C#使textbox滚动到最新一行
2009-11-16 12:33 2558方法1: textBox.Text += " ... -
Invoke()/BeginInvoke()区别
2009-11-15 17:43 7235查看MSDN如下: Control..::.Inv ... -
Invoke 和 BeginInvoke 的真正涵义
2009-11-15 17:37 1331BeginInvoke 方法真的是新开一个线程进行异步调用 ... -
线程,同步与锁——Lock你到底锁住了谁
2009-11-15 01:18 1597线程在多核时代的优势月来越明显,多线程编程的学习也提上议事日程 ... -
关于lock(this)的说明及用法
2009-11-15 01:16 5363一. 为什么要lock,lock了 ... -
远程dll注入 C#
2009-11-14 16:43 3140using System; using System. ... -
C# 3.0新特性之扩展方法
2009-11-09 17:02 989C#3.0扩展方法是给现有类型添加一个方法。现在类型既可是基本 ...
相关推荐
### 在C#中编写多线程应用程序 #### 引言 多线程是现代软件开发中的一个重要概念,尤其是在像C#这样的高级编程语言中。它允许程序同时执行多个任务,从而提高了应用程序的性能和响应性。本文将详细介绍如何在C#中...
本项目,"C#编写的多线程多主机端口扫描程序",正是针对这一需求而设计的。它利用C#编程语言的强大功能,特别是其对多线程的支持,实现了高效快速地扫描多个主机的多个端口。 首先,我们来理解多线程的概念。在单...
在本案例中,"c#编写的多线程上位机"是一个利用C#实现的,具有多线程功能的上位机程序。上位机通常指的是用于控制和通信的计算机,它与下位机(如PLC、单片机等)进行数据交互,以实现自动化设备或系统的监控和管理...
描述:由C#编写的多线程异步抓取网页的网络爬虫控制台程序 功能:目前只能提取网络链接,所用的两个记录文件并不需要很大。网页文本、图片、视频和html代码暂时不能抓取,请见谅。 但需要注意,网页的数目是非常...
以下是对"C#编写多线程程序源码"的详细解读: 1. **线程概念**:线程是操作系统分配CPU时间的基本单元,每个进程至少包含一个线程。在C#中,`System.Threading`命名空间提供了创建和管理线程的类和方法。 2. **...
这个基于C#开发的多线程处理程序源代码,是利用Visual Studio 2005 (VS2005) 开发环境构建的,旨在演示如何有效地利用多线程进行后台运算和同步处理。 首先,我们要理解什么是多线程。在单核CPU系统中,多线程可以...
总之,这个"C#编写的多线程计算器"项目展示了如何利用C#的多线程特性来优化计算密集型任务的执行,提高程序的响应速度。通过合理设计和使用同步机制,可以实现高效且线程安全的计算环境。这个实例对于学习多线程编程...
在C#中编写多线程应用程序,简单!_www_knowsky_com.htm在C#中编写多线程应用程序,简单!_www_knowsky_com.htm在C#中编写多线程应用程序,简单!_www_knowsky_com.htm
在C#编程语言中,多线程是一种强大的技术,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应性。多线程是现代计算环境中不可或缺的一部分,尤其是在处理大量数据、进行复杂计算或者需要实现并发操作的...
本文将深入探讨标题为"C# 编写的多线程的源码"的项目,以及相关的知识点。 首先,多线程允许一个应用程序同时执行多个任务,提高程序的并发性。在C#中,可以使用System.Threading命名空间中的Thread类来创建和管理...
在C#编程中,多线程是一个核心概念,它允许程序同时执行多个任务,从而提高应用程序的效率和响应性。创建多线程可以利用多核处理器的优势,将复杂的任务分解为若干个独立运行的部分,使得程序能更好地处理大量数据或...
以上知识点涵盖了C#中多线程串口通讯的基本原理和实践技巧,通过学习和掌握这些内容,开发者可以编写出高效、稳定的串口通信程序。在实际项目中,还需要根据具体需求和硬件环境调整和完善代码。
在C#编程中,多线程是一项核心技能,特别是在处理并发任务、提高应用程序性能和响应速度时。这个名为"C#多线程测试程序"的示例项目,旨在帮助开发者更深入地理解C#中如何创建和管理多线程。下面我们将详细探讨C#多...
本项目“C#编写多线程搜索引擎”(WebApplication1)正是利用了这一特性,旨在创建一个能够并行处理搜索请求的搜索引擎。 首先,我们要理解什么是多线程。在单线程系统中,程序执行是顺序的,一次只能执行一个任务...
C#语言提供了丰富的多线程支持,让我们能够编写出高效的多线程应用程序。在这个"多线程互斥实例 多线程获取同一变量"的示例中,我们将探讨如何在多个线程中安全地访问共享资源,避免数据不一致性和竞态条件。 首先...
在C#编程中,多线程消息处理是一个关键的领域,尤其在开发高效、响应迅速的应用程序时。本文将深入探讨“C#多线程消息处理例子”中的核心概念,包括消息处理、线程间通信、UI交互以及代理的使用。 首先,我们需要...
本项目“基于Socket的多线程C#爬虫程序”采用C#语言编写,利用Socket通信库进行网络连接,结合多线程技术提高爬取效率,为用户提供了高效、灵活的数据抓取解决方案。 首先,我们来理解Socket在网络编程中的作用。...
6. **Program.cs**: 通常这是C#程序的主入口点,定义了`Main`方法,它启动程序并调用其他类和方法来初始化和运行整个应用程序。 7. **WinLoadDown.csproj**: 这是一个项目文件,用于描述C#项目的所有元数据,包括...
在C#编程语言中,多线程是一种强大的技术,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应性。本源码示例是基于C#和Visual Studio 2005(VS2005)开发的,旨在帮助开发者理解和实践多线程处理的复杂...