文章类型: .NET
关键词: 多线程,学习
内容摘要:

多线程学习(一)

2015/7/29 10:41:06    来源:apple    阅读:

一段比较经典的多线程学习代码。

1
、用到了多线程的同步问题。
2
、用到了多线程的顺序问题。

如果有兴趣的请仔细阅读下面的代码。注意其中代码段的顺序,思考一下,这些代码的顺序能否互相调换,为什么?这应该对学习很有帮助的。为了演示,让所有的线程都Sleep了一段时间。

using System.Net;

using System;

using System.IO;

using System.Text;

using System.Threading;

using System.Diagnostics;

 

namespace Webb.Study

{

    class TestThread

    {

        static Mutex m_Mutex = new Mutex();

        static Thread[] m_testThreads = new Thread[10];

        static int m_threadIndex = 0;

 

        static void ThreadCallBack()

        {

            TestThread.m_Mutex.WaitOne();

            int m_index = m_threadIndex;

            TestThread.m_Mutex.ReleaseMutex();

            Console.WriteLine("Thread {0} start.", m_index);

            for (int i = 0; i <= 10; i++)

            {

                TestThread.m_Mutex.WaitOne();

                Console.WriteLine("Thread {0}: is running. {1}", m_index, i);

                TestThread.m_Mutex.ReleaseMutex();

                Thread.Sleep(100);

            }

            Console.WriteLine("Thread {0} end.", m_index);

        }

 

        public static void Main(String[] args)

        {

            Console.WriteLine("Main thread start.");

            for (int i = 0; i < TestThread.m_testThreads.Length; i++)

            {

                TestThread.m_threadIndex = i;

                TestThread.m_testThreads[i] = new Thread(new ThreadStart(ThreadCallBack));

                TestThread.m_testThreads[i].Start();

                Thread.Sleep(100);

            }

            for (int i = 0; i < TestThread.m_testThreads.Length; i++)

            {

                TestThread.m_testThreads[i].Join();

            }

            Console.WriteLine("Main thread exit.");

        }

    }

}


1
、主函数中这两句能否互换?为什么?
                TestThread.m_testThreads[i].Start();
                Thread.Sleep(
100);

2
CallBack函数中这两句能否互换?为什么?会有什么不同的结果?
                TestThread.m_Mutex.ReleaseMutex();
                Thread.Sleep(100);

3
、主函数能否写成这样?为什么?会有什么不同的结果?

          public static void Main(String[] args)

        {

            Console.WriteLine("Main thread start.");

            for (int i = 0; i < TestThread.m_testThreads.Length; i++)

            {

                TestThread.m_threadIndex = i;

                TestThread.m_testThreads[i] = new Thread(new ThreadStart(ThreadCallBack));

                TestThread.m_testThreads[i].Start();

                TestThread.m_testThreads[i].Join();

                Thread.Sleep(100);

            }

            Console.WriteLine("Main thread exit.");

        }

4、这几句的作用是什么?那么程序中还存在什么样的问题?应该做怎样的修改?
   TestThread.m_Mutex.WaitOne();
   int m_index = m_threadIndex;
   TestThread.m_Mutex.ReleaseMutex();

↑ 上一篇文章:C#中类的重要特性:继承(二) 关键词:C#,类,重要,特性,继承 发布日期:2015/7/29 10:39:02
↓ 下一篇文章:多线程学习(二) 关键词:多线程,学习 发布日期:2015/7/29 10:42:30
相关文章:
多线程学习(二) 关键词:多线程,学习 发布日期:2015-07-29 10:42
线程间操作无效: 从不是创建控件的线程访问它的三种方法 关键词:C#,多线程,线程间操作无效,从不是创建控件的线程访问它,三种方法 发布日期:2015-07-30 13:37
带你飞之Android多线程与异步任务(第一篇) 关键词:Android,多线程,异步任务,异常操作 发布日期:2017-09-12 17:22
相关目录:.NET软件开发JAVAANDROID
我要评论
正在加载评论信息......