多线程

来源:互联网 发布:sql varchar 最大长度 编辑:程序博客网 时间:2024/05/17 00:00

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

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();

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 穿裙子上衣太长了怎么办 微信封号了零钱怎么办 快递加盟商欠我工资怎么办 加盟费交了以后怎么办 加盟总部违约加盟商该怎么办 自行车锁钥匙丢了怎么办 假体隆胸肿胀痛怎么办 恶露60天不干净怎么办 剖腹产俩月恶露不干净怎么办 剖腹产恶露一个多月还没干净怎么办 小月子全身流虚汗怎么办 生完孩子严重便秘怎么办啊 产后第5天恶露少怎么办 有恶露排不出来怎么办 刚生完小孩便秘怎么办 产后15天有鲜血怎么办 恶露未净同房了怎么办 药流2月恶露不尽怎么办 生完孩子小腹痛怎么办 月子里恶露有异味怎么办 恶露干净了有异味怎么办 顺产后恶露白色异味怎么办 产妇排出的恶露有异味怎么办 恶露有股腥臭味怎么办 生完孩子下面有异味怎么办 销售货物开票税率错了怎么办 8h床垫有橡胶味怎么办 买回来的鞋子臭怎么办 耐克保修卡没了怎么办 雅萌保修卡没了怎么办 苹果保修卡没了怎么办 新车迟迟不给合格证怎么办 手机系统剩余空间少怎么办 桌子被掉色的袋子印色怎么办 袋子掉色弄到柜子上怎么办 健身房老板跑路教练怎么办 健身房老板跑路了怎么办 淘宝断货了该怎么办 淘金猫网购频道账号换了怎么办 京东商城信用卡无法付款怎么办 京东第三方退货拒收怎么办