/// <summary> /// 节点队列(支持1读1写同时处理)测试 /// </summary> /// <param name="nodes"></param> public readWrite(node[] nodes) { queue = new queue <node>(new node()); values = new subArray <node>(nodes.Length); using (task task = new task(thread = 2)) { task.Add(push, nodes); task.Add(pop); } if (values.Count != nodes.Length) { Console.WriteLine("ERROR"); } else { int value = 0; foreach (node node in values.UnsafeArray) { if (value != node.Value) { Console.WriteLine("ERROR"); break; } node.UnsafeClearQueueNextNode(); ++value; } } }
/// <summary> /// 并发测试 /// </summary> /// <param name="thread"></param> /// <param name="nodes"></param> public concurrent(int thread, node[][] nodes) { int popThread = thread >> 2; queue = new queue <node> .concurrent(new node()); values = new subArray <node> [popThread]; using (task task = new task((pushThread = pushEndThread = thread) + (this.popThread = popEndThread = popThread))) { for (int loop = 0; loop != popThread; ++loop) { task.Add(pop); } for (int loop = 0; loop != thread; ++loop) { task.Add(push, nodes[loop]); } } node[] array = values.concat(node => node.ToArray()); if (array.Length != thread * nodes[0].Length) { Console.WriteLine("ERROR"); } else { int value = 0; foreach (node node in (array = array.getSort(node => node.Value))) { if (value != node.Value) { Console.WriteLine("ERROR"); break; } node.UnsafeClearQueueNextNode(); ++value; } } }
/// <summary> /// 并发测试 /// </summary> /// <param name="thread"></param> /// <param name="nodes"></param> public concurrent(int thread, node[][] nodes) { pool = new fastCSharp.indexPool <node>(); using (task task = new task(pushThread = thread)) { for (int loop = 0; loop != thread; ++loop) { task.Add(push, nodes[loop]); } } subArray <node> values = pool.GetArray(); if (values.Count != 0) { Console.WriteLine("ERROR Count " + values.Count.toString()); } pool.Dispose(); }