日期:2014-05-18  浏览次数:20792 次

2个线程,一个接收,一个存数据库,前者速度快,感觉只有接收,没有存储
c#2个线程,一个线程接收数据,全部存到一个大数组里面
另外一个线程从大数据里面取数据存储到数据库
调试时:一般如果接收数据快,只有接收线程,没有存储线程。。如何处理啊
线程:while(true)
{
  {ExeData...}
  Thread.Sleep(100)
}
接收数据函数,和存到数据库函数应该没错,只是后者速度肯定慢于前者

------解决方案--------------------
很简单,用两个ManualResetEvent对象表示队列未满,和队列不空两个状态,

两个线程分别调用ManualResetEvent.WaitOne,成功后操作队列,并根据队列中是否有数据用Set/reset重新设置两个ManualResetEvent的状态,


探讨

引用:
这只是个简单的同步问题,大数组相当于缓冲区,最好设计成一个队列,接受线程把数据加入队列头部,存储线程从队列末端取出数据写入数据库,如果队列满了,接受线程就自愿休眠或者用同步对象阻塞自己,存储线程也一样,如果队列空,则自愿休眠或者用同步对象阻塞自己,

基本上是那样做的。但是2个线程如何同步,协调呢?难道程序控制2个线程开始和暂停