`
caozuiba
  • 浏览: 905097 次
文章分类
社区版块
存档分类
最新评论

C#多线程共享数据

 
阅读更多
在多线程编程中,我们经常要使用数据共享.C#中是如何实现的呢?很简单,只要把你要共享的数据设置成静态的就可以了.关键字static .如下:
static Queue q1=new Queue();
static int b=0;
在这里我定义了一个整形变量b和队列q1.
接下去就可以创建多线程代码了.如下:
MyThread myc;
Thread[] myt;
myt=new Thread[10];
myc=new MyThread();
for(int i=0;i<10;++i)
{
myt[i]=new Thread(new ThreadStart(myc.DoFun));
// System.Console.WriteLine("<<{0}>>",myt[i].GetHashCode());
myt[i].Start();
Thread.Sleep(1000);
}
你可能惊奇的发现这里使用了一个类实例myc.在起初的设计中我使用了MyThread数组,对于本例来说这没有什么关系,当线程要使用不同的操作时,那就要使用其他的类实例了.


以下是完整的代码:
using System;
using System.Threading;
using System.Collections;

namespace shareThread
{
class MyThread
{
static Queue q1=new Queue();
static int b=0;

public void DoFun()
{
lock(this)
{
++b;
q1.Enqueue(b);
}
System.Console.WriteLine("B:{0}--------------",b);
PrintValues( q1 );


}

public static void PrintValues( IEnumerable myCollection )
{
System.Collections.IEnumerator myEnumerator = myCollection.GetEnumerator();
while ( myEnumerator.MoveNext() )
Console.Write( "/t{0}", myEnumerator.Current );
Console.WriteLine();
}

}

/// <summary>
/// Class1 的摘要说明。
/// </summary>
class ClassMain
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
MyThread myc;
Thread[] myt;


myt=new Thread[10];
myc=new MyThread();
for(int i=0;i<10;++i)
{


myt[i]=new Thread(new ThreadStart(myc.DoFun));
// System.Console.WriteLine("<<{0}>>",myt[i].GetHashCode());
myt[i].Start(); //线程运行
Thread.Sleep(1000);//主线程睡眠
}
System.Console.Read();//等待完成,dos窗口不会马上关闭了.
}
}
}
分享到:
评论

相关推荐

    C#多线程互斥实例 多线程获取同一变量

    C#多线程互斥实例 多线程获取同一变量(不重复)。是一个很好的学习例子

    C#的多线程同步,C#中四种进程或线程同步互斥的控制方法

    C#的多线程同步,C#中四种进程或线程同步互斥的控制方法

    C#的多线程示例;几个多线程之间的互斥,同步;WPF主界面INVOKE

    几个多线程之间的互斥,同步;WPF主界面

    C# socket多线程编程

    所谓单个写入程序/多个阅读程序的线程同步问题,是指任意数量的线程访问共享资源时,写入程序(线程)需要修改共享资源,而阅读程序(线程)需要读取数据。在这个同步问题中,很容易得到下面二个要求: 1) 当一个...

    C# 多线程编程实战

    C# 多线程编程实战 所谓单个写入程序/多个阅读程序的线程同步问题,是指任意数量的线程访问共享资源时,写入程序(线程)需要修改共享资源,而阅读程序(线程)需要读取数据。

    c# 线程安全队列的用法原理及使用示例

    在多线程并行的情况下会出现共享数据会线程间读取与写入不一直的情况,为了解决这种情况,通常会使用锁来解决,也就是将并行改为串行。但是在使用穿行违背了使用多线程并发的初衷,这种情况下我们可以考虑采用线程...

    C#线程锁介绍源码

    Interlocked 类提供了同步对多个线程共享的变量的访问的方法。如果该变量位于共享内存中,则不同进程的线程就可以使用该机制。互锁操作是原子的,即整个操作是不能由相 同变量上的另一个互锁操作所中断的单元。这在...

    描述C#多线程中lock关键字的使用分析

    每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生。C#提供了一...

    开源C# 数据采集小工具

    开源共享 .net多线程 线程池 数据采集工具

    C#多线程学习之(三)生产者和消费者用法分析

    本文实例讲述了C#多线程学习之生产者和消费者用法。分享给大家供大家参考。具体实分析如下: 前面的文章说过,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。这可能带来的问题就是...

    浅析c# 线程同步

    在多线程程序中,允许线程访问任何资源所需的执行时间。线程共享资源并异步执行。 访问共享资源(数据)是有时可能会暂停系统的关键任务。所以可以通过线程同步来处理它。 主要场景如:存款,取款等交易业务处理。 ...

    c#.net多线程编程教学——线程同步

    随着对多线程学习的深入,你可能觉得需要了解一些有关线程共享资源的问题. .NET framework提供了很多的类和数据类型来控制对共享资源的访问。 考虑一种我们经常遇到的情况:有一些全局变量和共享的类变量,我们需要...

    C# 线程同步详解

    多个线程同时访问共享数据的时,线程同步能防止数据损坏,之所以强调同时这个概念,因为线程同步本质就是计时问题。 异步和同步是相对的,同步就是顺序执行,执行完一个再执行下一个,需要等待、

    c#多线程中Lock()关键字的用法小结

    本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。 每个线程都有自己的资源,但是代码区是共享...

    C#中volatile与lock用法

    volatile是C#中用于控制同步的关键字,其意义是针对程序中一些敏感数据,不允许多线程同时访问,保证数据在任何访问时刻,最多有一个线程访问,以保证数据的完整性,volatile是修饰变量的修饰符。 1、volatile的使用...

    c# 死锁和活锁的发生及避免

    避免多线程同时读写共享数据 在实际开发中,难免会遇到多线程读写共享数据的需求。比如在某个业务处理时,先获取共享数据(比如是一个计数),再利用共享数据进行某些计算和业务处理,最后把共享数据修改为一个新的...

    深入分析C# 线程同步

    如果有多个线程同时访问共享数据的时候,就必须要用线程同步,防止共享数据被破坏。如果多个线程不会同时访问共享数据,可以不用线程同步。 线程同步也会有一些问题存在: 性能损耗。获取,释放锁,线程上下文建...

    C#锁(lock)的练习-模拟多客户端购票example

    该示例是为了练习下C#中lock的用途,处理多线程之间共享数据的准确性。

    c#.NET服务器可同时接受多个用户访问

    服务器 可以接受任何客户端在特定的端口发送的数据 并自动把数据放置在D:中 可同时接受50个用户连接传送数据 此服务器 代码完全公开 可以相互学习 同时也感谢CSDN提供的很多资源 让我学到了很多东西 同时也上传了...

    详解c# 线程同步

    前面的文章都是讲创建多线程来实现让我们能够更好的响应应用程序,然而当我们创建了多个线程时,就存在多个线程同时访问一个共享的资源的情况,在这种情况下,就需要我们用到线程同步,线程同步可以防止数据(共享...

Global site tag (gtag.js) - Google Analytics