C#多线程共享数据
2024-07-21 02:30:03
供稿:网友
在多线程编程中,我们经常要使用数据共享.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窗口不会马上关闭了.
}
}
}