国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET:一段比較經典的多線程學習代碼

2024-07-10 13:10:25
字體:
來源:轉載
供稿:網友

  一段比較經典的多線程學習代碼。

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

僅做學習討論。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 禄丰县| 平泉县| 拉萨市| 繁峙县| 嘉祥县| 来凤县| 宁阳县| 浦江县| 万荣县| 工布江达县| 安龙县| 林口县| 阳城县| 广东省| 武冈市| 建昌县| 平度市| 长宁县| 宜君县| 原阳县| 曲水县| 霞浦县| 长白| 万盛区| 米易县| 六安市| 徐水县| 余江县| 贵定县| 庄河市| 那曲县| 金堂县| 梧州市| 拉萨市| 滕州市| 澄城县| 达日县| 错那县| 南漳县| 阿拉善右旗| 长宁区|