ASP.NET:一段比较经典的多线程学习代码

转载 2007年09月23日 20:54: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();

 

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

 一段比较经典的多线程学习代码。1、用到了多线程的同步问题。2、用到了多线程的顺序问题。如果有兴趣的请仔细阅读下面的代码。注意其中代码段的顺序,思考一下,这些代码的顺序能否互相调换,为什么?这应该对学...
  • thebesghost
  • thebesghost
  • 2006年08月26日 18:44
  • 613

.NET:一段比较经典的多线程学习代码

一段比较经典的多线程学习代码。   1、用到了多线程的同步问题。  2、用到了多线程的顺序问题。 ...
  • yagebu1983
  • yagebu1983
  • 2008年03月04日 18:32
  • 454

目前最好的一个Java学习路线

黑马程序员的老师总结了一套比较好的Java学习路线图,希望可以帮助到需要的学习的朋友,只要按照这套学习路线图来学习,肯定可以从入门到精通。 建议学习的朋友,先把这个路线图保存下来,这些都是学习Jav...
  • Wz1135640
  • Wz1135640
  • 2018年01月10日 16:39
  • 145

一段代码学习几个Python知识点

########################################################### zip(a, b)函数,将它可迭代的对象a, b作为参数,将a, b中对应的元...
  • vernice
  • vernice
  • 2016年03月19日 11:09
  • 1506

个人学习书籍整合推荐

存储 《大话存储2》     通俗易懂  ,不过有些”啰嗦“, 存储入门书籍不解释。 linux&内核 《鸟哥的Linux私房菜 基础篇》  《鸟哥的Linux私房菜服务器架设篇》   lin...
  • u010129347
  • u010129347
  • 2015年02月10日 10:22
  • 510

C++ 多线程学习总结

先来一个简单的例子,展示如何创建一个线程 #include #include #include using namespace std; unsigned Counter; uns...
  • hust_bochu_xuchao
  • hust_bochu_xuchao
  • 2016年11月08日 11:06
  • 863

ASP.NET 定时执行一段代码

在Global.asax启动一条线程就ok了,下面是启动线程定时写文件的例子 Global.asax C# code@ Application Language="C#...
  • lee576
  • lee576
  • 2008年10月14日 11:42
  • 4125

一段经典的c代码

今天看了CoolShell的一篇“深入理解C语言”的博文,受益匪浅,简单的写下自己的理解。 1 int main() { int a= 42; printf("%d...
  • goingstudy
  • goingstudy
  • 2013年03月16日 19:16
  • 605

JAVA多线程的一段代码

对程序员来说,代码是最直接沟通语言,试看如下代码: public class ThreadTest{ private int j;  public static void main(String ar...
  • ericzhp
  • ericzhp
  • 2009年11月28日 23:07
  • 305

从零开始学ASP.NET(基础篇)

原作者:蓝鲸出处:5D多媒体学ASPNET与ASP有区别,这种区别不是语言上的,而是思路上的区别。ASP是纯面向过程的,而ASPNET是完全面向对向的。这种区别使我们在编程的结构设计上要与ASP有很大...
  • 21aspnet
  • 21aspnet
  • 2004年11月04日 10:56
  • 5787
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET:一段比较经典的多线程学习代码
举报原因:
原因补充:

(最多只允许输入30个字)