zoukankan      html  css  js  c++  java
  • c#多线程(一)

    对于线程操作,一直没有特别的会用。自己写了些代码:贴出来大家分享。

    代码

            
    #region 简单线程,主线程与子线程threadAnther,局部变量互不影响

            
    static void SilmpleMultThread()
            {
                Thread threadAnther 
    = new Thread(new ThreadStart(WrietConsole));
                threadAnther.Start();
    //新线程启动,
                while (true) Console.Write("Y");//主线程不停的写 “Y”
            }

            
    static void WrietConsole()
            {
                
    while(true) Console.Write("X");//不停的写“X”
            }
            
    #endregion

            
    #region 副本分别在各自的内存堆栈中创建

            
    static void SimpleShareMultThread()
            {
                
    //变量x的副本分别在各自的内存堆栈中创建,输出也一样;
                Thread threadAnther = new Thread(new ThreadStart(Go));
                threadAnther.Start();
                Go();
            }

            
    static void Go()
            {
                
    //声明和使用同一个局部变量 x
                for (int x = 0; x < 5; x++)
                    Console.Write(
    "*");
            }

            
    #endregion

            
    #region 多个线程引用了一些公用的目标实例的时候,他们共享数据

            
    static void SimpleShareMuliThead()
            {
                
    //两个线程都调用OutPut方法,他们共享done字段。输出结果是一个Done
                Program prgoram = new Program();
                prgoram.OutPut();
                Thread threadAnother 
    = new Thread(new ThreadStart(prgoram.OutPut));
                threadAnother.Start();
            }

            
    bool done;

            
    public void OutPut()
            {
                
    if (!done) { done = true; Console.Write("Done"); }
            }

            
    #endregion

            
    #region 静态字段提供了另一种线程之间的共享数据

            
    static bool outDone; //静态字段,为所有线程共享
            static object locker = new object();

            
    static void SimpleShareStaticMulThead()
            {
                Thread threadAnother 
    = new Thread(OutDoneFunction);//线程初始化的另一种方法
                threadAnother.Start();
                OutDoneFunction();
            }

            
    static void OutDoneFunction()
            {
                
    //if (!outDone) { Console.Write("Done"); outDone = true; } //这种情况打印出两个“Done”
                lock (locker)
                {
                    
    if (!outDone) { Console.Write("Done"); outDone = true; } 
                }
    //为了避免这种情况,用lock,锁机制,确定同一时刻只有一个线程进入临界区
                
    //  if (!outDone) {  outDone = true; Console.Write("Done");  } //这种情况打印出一个“Done”
            }

            
    #endregion
  • 相关阅读:
    IIS7.5 部署WCF项目问题集锦
    C#制作“安装和部署”时,实现软件开机启动
    Strsafe.h:更安全的C语言字符串处理函数
    FMOD音频引擎简单使用
    您也使用托管C++吗?
    《Programming in Lua中文版》 8.Compilation, Execution, and Errors
    恶心的C语言strtok函数
    Lua一些基本函数
    Lua tables 分析1
    如何让EditPlus支持LUA(转)
  • 原文地址:https://www.cnblogs.com/csharponworking/p/1621470.html
Copyright © 2011-2022 走看看