易截截图软件、单文件、免安装、纯绿色、仅160KB

归结一下子:C#线程同步的几种步骤

我们在编程的时分,有时会运用多线程来解决问题,例如你的程序急需在后台老板处置一大堆数据,但还要施用户界面居于可操作状态;或许你的程序亟需访问一些外部资源悉数据库或网络资料等。这些景况你都可以创设一个头线程去处置,然则,多线程不可逆转地会带回一个问题,乃是线程同步的问题。如其这个问题处置糟糕,我们就会失去一些非预期的结果。
  在网上也看过一些至于线程同步的稿件,实则线程同步有好几种步骤,下部我就容易的做一下子归结。
  1、volatile关键字
  volatile是最容易的一种同步步骤,当然容易是要付出代价的。它只好在变量一级做同步,volatile的含意乃是告诉微处理器, 不用将我放入工作内存储器, 请直接在主存操作我。(【转自www.bitsCN.com 】)因而,应多线程与此同时访问该变量时,都将直接操作主存,从本质上作到了变量共享。
  能够被标识为volatile的务必是以次几类别型:(摘自MSDN)
•Any reference type.
•Any pointer type (in an unsafe context).
•The types sbyte, byte, short, ushort, int, uint, char, float, bool.
•An enum type with an enum base type of byte, sbyte, short, ushort, int, or uint.
  如:
Code
public class A
{
private volatile int _i;
public int I
{
get { return _i; }
set { _i = value; }
}
}
  但volatile并不能实现真个的同步,由于它的操作级别只停留在变量级别,而不是原子级别。如果是在单微处理器系统中,是没任何问题的,变量在主存中没有机会被其他人批改,由于唯有一个微处理器,这就叫做processor Self-Consistency。但在多处理器系统中,或者就会有问题。 每个微处理器都有自个儿的data cach,并且被更新的数据也未见得会立马写回来主存。之所以可能会促成不同步,但这种景况很难发作,由于cach的读写速度对等快,flush的频次也对等高,唯有在压力测试的时分才有可能发生,并且几率十分十分小。
  2、lock关键字
  lock是一种比较好用的容易的线程同步模式,它是透过为给定对象获取互斥锁来兑现同步的。它可以保证书当一个线程在要害代码段的时分,另一个线程不会进去,它唯其如此等候,待到那个线程对象被开释,且不说线程出了临界区。用法:   lock的参数务必是基于引述门类的对象,不用是根本部类像bool,int什么的,这么基本不能同步,原因是lock的参数要求是对象,如若传到int,准定要


相关文档:

C# 操作MySQL数据库的简单例子

示例演示了用C#操作MySQL的方法,提供了三个可重用的类MySqlDBUtil,MySqlPageUtil,Page。
本示例由 C#操作Access数据库的简单例子(http://www.albertsong.com/read-56.html)修改而来。
1.首先下载MySQL数据库的.NET驱动
http://dev.mysql.com/get/Downloads/Connector-Net/mysql-connector-net-5.0.8.1-noinstall.zip/ ......

c# 从XML读数据

C#
 DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("~/Config/User_yhlx_Jb.xml"));
DataView dv = ds.Tables[0].DefaultView;
//dv.RowFilter = "State=0";
this.DropDownList1.DataSource = dv;
this.DropDownList1.DataTextField = "text";
this ......

c# 支持XML序列化的泛型 Dictionary

/// <summary>
/// 支持XML序列化的泛型 Dictionary
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <typeparam name="TValue"></typeparam>
[XmlRoot("SerializableDictionary")]
public class SerializableDictionary<TKey, TValue& ......

C#中string作为引用类型与类的区别的一个问题

RT。先贴代码
C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Value_Ref_test1
{
class Program
{
static void Main(string[] args)
{
point a = new point (10,10) ;
point b = a;
......

C#中一些字符串操作的常用用法,c#编码和解码

//获得汉字的区位码
  byte[] array = new byte[2];
  array = System.Text.Encoding.Default.GetBytes("啊");
int i1 = (short)(array[0] - ''\0'');
  int i2 = (short)(array[1] - ''\0'');
//unicode解码方式下的汉字码
  array = System.Text.Encoding.Unicode.GetBytes("啊");
  i1 = (short)(arra ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号