• 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
  • 相关阅读:
    hdu 1715
    hdu 1370
    hdu 2370
    hdu 1393
    hdu 1564
    hdu 1720
    hdu 1342
    SQL技巧(sp_procedure_params_rowset,SQL中设置数据值为null)
    Control ‘dg’ of type 'GridView' must be placed inside a form tag with runat=server
    GridView事件中获取rowIndex值
  • 原文地址:https://www.cnblogs.com/csharponworking/p/1621470.html
Copyright © 2020-2023  润新知