C# 线程同步
原文地址
http://www.cnblogs.com/michaelxu/archive/2008/09/20/1293716.html
我们在编程的时候,有时会使用多线程来解决问题,比如你的程序需要在后台处理一大堆数据,但还要使用户界面处于可操作状态;或者你的程序需要访问一些外部资源如数据库或网络文件等。这些情况你都可以创建一个子线程去处理,然而,多线程不可避免地会带来一个问题,就是线程同步的问题。如果这个问题处理不好,我们就会得到一些非预期的结果。
在网上也看过一些关于线程同步的文章,其实线程同步有好几种方法,下面我就简单的做一下归纳。
一、volatile关键字
volatile是最简单的一种同步方法,当然简单是要付出代价的。它只能在变量一级做同步,volatile的含义就是告诉处理器, 不要将我放入工作内存, 请直接在主存操作我。(【转自www.bitsCN.com 】)因此,当多线程同时访问该变量时,都将直接操作主存,从本质上做到了变量共享。
能够被标识为volatile的必须是以下几种类型:(摘自MSDN)
<div class="postBody"><li style="padding-left: 30px;">Any reference type. <li style="padding-left: 30px;">Any pointer type (in an unsafe context). <li style="padding-left: 30px;">The types sbyte, byte, short, ushort, int, uint, char, float, bool. <li style="padding-left: 30px;">An enum type with an enum base type of byte, sbyte, short, ushort, int, or uint. 如:
<div class="cnblogs_code">http://www.agoit.com/Images/OutliningIndicators/ContractedBlock.gif http://www.agoit.com/Images/OutliningIndicators/ExpandedBlockStart.gif Code
<!---->public class A
{
private volatile int _i;
public int I
{
get { return _i; }
set { _i = value; }
}
}
页:
[1]