国产探花免费观看_亚洲丰满少妇自慰呻吟_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();

僅做學習討論。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安庆市| 昭觉县| 延寿县| 怀柔区| 肥东县| 舟山市| 文昌市| 叶城县| 绥芬河市| 昔阳县| 江山市| 新津县| 昂仁县| 平遥县| 宜良县| 百色市| 文昌市| 晋城| 哈巴河县| 河北区| 武城县| 集贤县| 扎囊县| 八宿县| 邯郸县| 资兴市| 饶平县| 馆陶县| 鄂伦春自治旗| 九龙城区| 宣恩县| 保山市| 雷州市| 嘉义市| 乐业县| 潞城市| 襄樊市| 卓尼县| 正定县| 崇义县| 寿光市|