现在我有3个线程,对应处理函数分别是主要线程master(),和两个辅助线程slaver1(),slaver2()其中slaver1和slaver2线程从串口读取数据data1和data2,然后master要取data1和data2数据来用master对于data1和data2只读取不修改,请问这种情况是否要设置同步锁?后来我设置了一个ManualResetEvent锁,代码如下:master()
{
ManualResetEvent.reset();
我自己的处理代码,读取data1和data2;
ManualResetEvent.set();
}slaver1()
{
ManualResetEvent.waitone();
data1 = 从串口读取数据;
}slaver2()
{
ManualResetEvent.waitone();
data2 = 从串口读取数据;
}请问这段代码有没有什么问题实际情况中master接受完data1和data2后,要通过网络往别处送信息,运行一段时间后老死机
是否会和线程同步有关?
{
ManualResetEvent.reset();
我自己的处理代码,读取data1和data2;
ManualResetEvent.set();
}slaver1()
{
ManualResetEvent.waitone();
data1 = 从串口读取数据;
}slaver2()
{
ManualResetEvent.waitone();
data2 = 从串口读取数据;
}请问这段代码有没有什么问题实际情况中master接受完data1和data2后,要通过网络往别处送信息,运行一段时间后老死机
是否会和线程同步有关?
解决方案 »
- 求解!
- 用WebClient下载文件路径出现非法字符
- 刚才和同事争论关于变量的问题的问题
- 用stream 或 streamreader 读取 包含中文的xml时 总是英文不变 中文 是乱码 怎么办
- replace问题
- 如何将根据不同条件获得的表记录填充到同一数据集?
- 帮看http://community.csdn.net/Expert/topic/3683/3683045.xml?temp=.6879084,顶者有分
- 多窗体中遇到的问题(新手疑惑)
- 如何获取唤醒成功后的系统消息
- 如何用foreach語句自動遍歷類中定義的所有成員
- Socket客户端接收服务端发来的数据 的事件怎么写?不想用循环,那样性能不好。
- DataGridCiew显示问题!
也许是我没理解ManualResetEvent的用法?
你的主线程是要用2个辅助线程获取的数据 那你现在这样写能保证你的主线程可以访问到2个辅助线程中的数据吗?
也就是你好像没有保证你的主线程进入处理data1 和data2的时候2个辅助线程都结束不知道我理解的对不对?
{
autoEvent = new AutoResetEvent(false);
Thread t1 = new Thread(new ThreadStart(sayhello));
t1.Start();
autoEvent.WaitOne();//阻塞当前线程并等待t1执行完成
Thread t2 = new Thread(new ThreadStart(sayword));
t2.Start();
}
void sayhello()
{
autoEvent.Reset();//设置等待事件,使其他线程等待该方法
MessageBox.Show("hello");
autoEvent.Set();//通知其他线程该方法执行完成
}
void sayword()
{
MessageBox.Show("word");
}
看看这个方法行不行?