现有线程A及线程B。两个线程对同一个结构体数组进行操作。
A线程循环将数据写入结构体数组并递增标识位,B线程循环从结构体数组将数据读出并解析也有一个读取标识位。
理论上,A的写入速度要比B的解析速度快,假设 A写入速度为3ms/帧,B读取并解析速度6ms/帧,但实际中有可能出现A写入速度为3ms/帧,B读取速度1ms/帧的情况。通过什么方式能保证B读取的数据一直处在A写入之后,且如果A写入的条数超过B读取的条数500帧时,清楚中间这500帧以赶上A的进度。多线程线程锁线程同步C#winform

解决方案 »

  1.   

       public class Program
        {
            public static void Main(string[] args)
            {            var p = new Program();            p.TestCollection();            Console.Read();
            }        public  void TestCollection()
            {
                var list = new List<DateTime>();            var objLock = new object();            var t_producer = new Thread(() => {                while (true)
                    {
                        Thread.Sleep(500);                    lock (objLock)
                        {
                            var dt = DateTime.Now;
                            list.Add(dt);
                            Console.WriteLine("put a datetime : {0:yyyy-MM-DD HH:mm:ss}", dt);
                        }
                    }
                    
                });            var t_consumer = new Thread(() => {                while (true)
                    {
                        Thread.Sleep(800);                    lock (objLock)
                        {
                            if (list.Count > 500)
                                list.Clear();
                            if (list.Count > 0)
                            {
                                var dt = list.ElementAt(0);
                                list.RemoveAt(0);
                                Console.WriteLine("Get a datetime : {0:yyyy-MM-DD HH:mm:ss}", dt);
                            }                    }
                    }
                    
                });            t_producer.Start();
                t_consumer.Start();   
            }        
        }