现有线程A及线程B。两个线程对同一个结构体数组进行操作。
A线程循环将数据写入结构体数组并递增标识位,B线程循环从结构体数组将数据读出并解析也有一个读取标识位。
理论上,A的写入速度要比B的解析速度快,假设 A写入速度为3ms/帧,B读取并解析速度6ms/帧,但实际中有可能出现A写入速度为3ms/帧,B读取速度1ms/帧的情况。通过什么方式能保证B读取的数据一直处在A写入之后,且如果A写入的条数超过B读取的条数500帧时,清楚中间这500帧以赶上A的进度。多线程线程锁线程同步C#winform
A线程循环将数据写入结构体数组并递增标识位,B线程循环从结构体数组将数据读出并解析也有一个读取标识位。
理论上,A的写入速度要比B的解析速度快,假设 A写入速度为3ms/帧,B读取并解析速度6ms/帧,但实际中有可能出现A写入速度为3ms/帧,B读取速度1ms/帧的情况。通过什么方式能保证B读取的数据一直处在A写入之后,且如果A写入的条数超过B读取的条数500帧时,清楚中间这500帧以赶上A的进度。多线程线程锁线程同步C#winform
解决方案 »
- winform 根据指定的tag显示menutrip的菜单项
- 奇怪,突然到不到类SocketAsyncEventArgs了,重新安装VS2005还没有解决!
- 帮我看看这个钩子程序错在哪儿了。。
- winform程序打包 然后安装的时候 ,在程序菜单里会显示 "微软中国" 请问如何修改或者去掉?
- 学.net是先学c#好还是先学Asp.net好?
- 怎么load一个dll从指定的目录而不是GAC。
- C# 访问数据库出现的错误,高分求解!
- ODBC的问题
- [DllImport("User32.dll")] 如何 知道是 那个 dll , 以及里面有什么方法
- 遇到经济问题了,郁闷当中。散分~~~
- DataTable循环找出该节点下的所有子节点
- datatable 合并 数据
{
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();
}
}