none
如何让多个线程操依次作同一个函数 RRS feed

  • 问题

  • 我遇到的情况如下,如A,B,C等多个线程都是要调用同一个函数(这个函数是发送数据至ECU的),而且每个线程都是要多次调用那个函数,请问如何实现当几个线程同时开启时,使得函数被调用的次序如下,即A调用函数一次,再B调用函数一次,再C调用函数一次,再进行A,B,C的循环。求指导。
    2013年4月25日 13:56

答案

  • hi,

    这是线程顺序启动的意思,A-B-C顺序启动进行串行运算,这表示他门是有顺序关系的,只要知道如何等待就可以控制启动顺序了
    http://www.dotblogs.com.tw/yc421206/archive/2011/01/04/20575.aspx
    http://www.dotblogs.com.tw/yc421206/archive/2011/08/14/33104.aspx

    若函数内有共用资源也别忘了锁定


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/


    • 已编辑 余小章MVP 2013年4月25日 16:14
    • 已标记为答案 快子 2013年4月28日 5:13
    2013年4月25日 16:13

全部回复

  • hi,

    这是线程顺序启动的意思,A-B-C顺序启动进行串行运算,这表示他门是有顺序关系的,只要知道如何等待就可以控制启动顺序了
    http://www.dotblogs.com.tw/yc421206/archive/2011/01/04/20575.aspx
    http://www.dotblogs.com.tw/yc421206/archive/2011/08/14/33104.aspx

    若函数内有共用资源也别忘了锁定


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/


    • 已编辑 余小章MVP 2013年4月25日 16:14
    • 已标记为答案 快子 2013年4月28日 5:13
    2013年4月25日 16:13
  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    
    namespace Test
    {
        class TestThread
        {
            private static void ThreadFuncOne()
            {
                for (int i = 0; i < 10; i++)
                {
                    Console.WriteLine(Thread.CurrentThread.Name +"   i =  " + i);
                }
                Console.WriteLine(Thread.CurrentThread.Name + " has finished");
            }
    
            static void Main(string[] args)
            {
                Thread.CurrentThread.Name = "MainThread";
    
                Thread newThread = new Thread(new ThreadStart(TestThread.ThreadFuncOne));
                newThread.Name = "NewThread";
    
                for (int j = 0; j < 20; j++)
                {
                    if (j == 10)
                    {
                        newThread.Start();
                        newThread.Join();
                    }
                    else
                    {
                        Console.WriteLine(Thread.CurrentThread.Name + "   j =  " + j);
                    }
                }
                Console.Read();
            }
        }
    }


    2013年5月9日 8:50