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

 

相关文章推荐

每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码

2013-9-15 1.    CustomValidator验证控件验证用户输入的字符长度 在实际的开发中通常会遇到验证用户输入的字符长度的问题,通常的情况下,可以写一个js的脚本或者函数,在A...

Asp.net多线程下载示例源码

  • 2007年09月13日 06:22
  • 39KB
  • 下载

ASP.NET多线程下使用HttpContext.Current为null解决方案

原文地址:点击打开链接 多线程或者异步调用中如何访问HttpContext? 前面我还提到在APM模式下的异步完成回调时,访问HttpContext.Current也会返回nu...

Asp.net多线程下载示例源码

  • 2010年02月10日 11:12
  • 60KB
  • 下载

Asp.net(c#)实现多线程断点续传下载大文件

/// /// 下载的方法 /// /// 下载文件的路径 public void Reget(string filepath) ...

C#.NET多线程实例代码教程

  • 2013年07月28日 12:33
  • 4.64MB
  • 下载

Asp.net(c#)实现多线程断点续传

  • 2012年07月25日 09:37
  • 72KB
  • 下载

asp.net 计划任务管理程序实现,多线程

b/s模式下用程序实现计划任务,一直是个不太好解决和管理的问题,当然可以采用ajax 计时器的方法模拟form端的timer事件。 asp.net下实现可以将计划任务的方法放在global里,使用一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET:一段比较经典的多线程学习代码
举报原因:
原因补充:

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