并发与异步—创建、联合与休眠、阻塞

线程的共享状态:

在进程里,多线程共享同一个执行环境,特别是(内存),一个线程在后台获取数据,同时另一个线程显示所获得的数据,这些数据就是所谓的共享状态。

线程创建、联合与休眠:

class Program
    {
        static void Main(string[] args)
        {
            
            //创建线程
            Thread t = new Thread(WriteY);
            t.Start();

            //t.Join(TimeSpan.FromMilliseconds(5000));
            
            for (int i = 0; i < 1000; i++)
            {
                Console.Write("X");
            }

            Console.ReadKey();

        }

        static void WriteY()
        {
           // Thread.Sleep(0);    ||  Thread.Yield();         会立马放弃时间片,自动将CPU交给同一处理器上运行的线程。提示: 它可以帮助开发者发现线程安全问题:如果在代码任意位置插入Thread.Yield()会破坏程序,那么代码肯定存在bug
            for (int i = 0; i < 1000; i++)
            {
                Console.Write("Y");
            }
        }

        //单核处理器,系统会为每个线程分配时间片,模拟并发,(windows 一般为20毫秒)‘
        //多核心或者多处理器是能够真正实现并行执行


        //提示:线程被认为是优先占用它在执行过程与其他线程代码交叉执行的位置,这个术语通常可以解释出现的问题!
    }

线程阻塞:

线程阻塞是指线程由于特定原因暂停执行,如Sleeping或执行Join后等待另一个线程停止。阻塞的线程会立刻交出处理器时间片,然后从这时开始不再消耗处理器时间,直至阻塞条件结束。使用线程的ThreadState属性,可以测试线程的阻塞状态:

  bool blocked = (someThread.ThreadState&ThreadState.WaitSleepJoin) != 0;

ThreadState是一个枚举量,它由三”层“二进制位数据组成。然而,这其中大多数是冗余和废弃的。可以用扩展方法限定枚举的值:

 public static ThreadState Simplify(this ThreadState ts)
 {
     return ts & (ThreadState.Unstarted|ThreadState.WaitSleepJoin|ThreadState.Running|ThreadState.Stopped);
 }
原文地址:https://www.cnblogs.com/jaysen/p/6416482.html