社区
C#
帖子详情
关于多线程间通信的问题
边城狂人
2009-07-01 10:41:20
现在我有多个线程,如
threadLog, thread1, thread2, thread3 ....
除了threadLog之外,其它每个线程的操作都需要记录下来,也就是说,需要写日志。但是问题在于,写日志的操作是线程不安全的,所以我初步打算是让它在threadLog里写日志,问题是,我如何在其它线程里让将信息传递给threadLog,并让它记录日志呢?
希望大家帮帮忙,能提供小示例更佳!
先谢!
...全文
259
17
打赏
收藏
关于多线程间通信的问题
现在我有多个线程,如 threadLog, thread1, thread2, thread3 .... 除了threadLog之外,其它每个线程的操作都需要记录下来,也就是说,需要写日志。但是问题在于,写日志的操作是线程不安全的,所以我初步打算是让它在threadLog里写日志,问题是,我如何在其它线程里让将信息传递给threadLog,并让它记录日志呢? 希望大家帮帮忙,能提供小示例更佳! 先谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
haiwangstar
2009-07-02
打赏
举报
回复
我做过类似你这样的问题.我的做法是用Queue<T>解决的.同楼上说的一样. 我是有多个线程产生数据,一个线程负责发送数据给远端,我让产生数据的线程产生数据后就立即用Enqueue把数据排队到队列中,同时置AutoResetEvent对象,以通知发送线程去读取. 读取线程用Dequeue读取数据..当然要自己实现线程同步..
龙宜坡
2009-07-02
打赏
举报
回复
[Quote=引用 13 楼 netcoder 的回复:]
参考12楼
我一般使用Queue
thread1、thread2...进行Enqueue操作
threadLog进行Dequeue操作
[/Quote]
不错的选择
netcoder
2009-07-02
打赏
举报
回复
参考12楼
我一般使用Queue
thread1、thread2...进行Enqueue操作
threadLog进行Dequeue操作
wangsaokui
2009-07-02
打赏
举报
回复
除了threadLog之外,其它每个线程的操作都需要记录下来,也就是说,需要写日志。但是问题在于,写日志的操作是线程不安全的
写的确是不安全的,但保存是安全的,比如你做一个ArrayListA,然后各个线程添加消息到ArrayListA是安全的,需要保存的时候可以声明另外一个ArrayListB,然后将ArrayListA拷贝到ArrayListB,让ArrayListB去保存,保存后清除ArrayListA中的数据,(清楚位置索引范围就是拷贝到B时的索引范围)
wqzone
2009-07-02
打赏
举报
回复
很简单呀,
1、注意线程操作控件(非本线程创建)会产生异常,可以考虑使用异步委托的方式。
2、可以使用队列。
2、也可以搞个锁定之类的东西。这不就解决冲突了吗?
zenowolf
2009-07-02
打赏
举报
回复
消息队列是个不错的选择(MSMQ)
边城狂人
2009-07-02
打赏
举报
回复
[Quote=引用 3 楼 onlyalone 的回复:]
其它线程通过PostThreadMessage给threadLog发送消息,threadLog里就弄一循环
while(true)
{
MSG msg;
GetMessage(msg);//函数原型不是这样的,去查查
switch(msg.message)
case:
......
}
[/Quote]
PostThreadMessage好像是Windows SDK中的的API吧,在.NET中该如何处理呢?有.NET专用的方法么?
边城狂人
2009-07-02
打赏
举报
回复
[Quote=引用 7 楼 cnzdgs 的回复:]
写日志时lock一下就可以了,不需要集中在一个线程处理。
[/Quote]
写日志只是举个例,实际是个很复杂的逻辑
happyboyxq
2009-07-02
打赏
举报
回复
委托不是可以跨线程操作吗?用委托就可以了
OnlyAlone
2009-07-02
打赏
举报
回复
[Quote=引用 9 楼 jamesfancy 的回复:]
引用 3 楼 onlyalone 的回复:
其它线程通过PostThreadMessage给threadLog发送消息,threadLog里就弄一循环
while(true)
{
MSG msg;
GetMessage(msg);//函数原型不是这样的,去查查
switch(msg.message)
case:
......
}
PostThreadMessage好像是Windows SDK中的的API吧,在.NET中该如何处理呢?有.NET专用的方法么?
[/Quote]
dllimport,可以使.net程序中可以调用win32 api。我发了前面那个帖子后去查了下msdn,没找到.NET下发送线程消息的方法,不知道是不是我自己看得不够仔细
cnzdgs
2009-07-01
打赏
举报
回复
写日志时lock一下就可以了,不需要集中在一个线程处理。
aimeast
2009-07-01
打赏
举报
回复
可以用生产消费
q863829288
2009-07-01
打赏
举报
回复
mark
codelabs
2009-07-01
打赏
举报
回复
[Quote=引用 3 楼 onlyalone 的回复:]
其它线程通过PostThreadMessage给threadLog发送消息,threadLog里就弄一循环
while(true)
{
MSG msg;
GetMessage(msg);//函数原型不是这样的,去查查
switch(msg.message)
case:
......
}
[/Quote]
正解
OnlyAlone
2009-07-01
打赏
举报
回复
其它线程通过PostThreadMessage给threadLog发送消息,threadLog里就弄一循环
while(true)
{
MSG msg;
GetMessage(msg);//函数原型不是这样的,去查查
switch(msg.message)
case:
......
}
春天的气息
2009-07-01
打赏
举报
回复
线程问题参考一下吧:
http://www.bbs180.com/topictag-14.aspx
ToHai
2009-07-01
打赏
举报
回复
帮顶一个
多
线程间通信
的
问题
本文探讨了多线程编程中的通信与同步
问题
,包括直接访问全局变量、使用访问接口和消息/命令队列三种通信方式及其优缺点,并讨论了线程间的竞争与同步
问题
。
进程管理(三)——进程间通信和多线程
问题
本文详细介绍了进程间通信的多种方式,包括管道(匿名与命名)、消息队列、共享内存、信号量和信号,并探讨了其优缺点。此外,还深入讲解了多线程同步中的临界区、互斥与同步,以及锁、信号量和管程等机制。最后,讨论了如何使用这些概念解决并发
问题
。
多
线程间通信
的注意
问题
本文深入探讨Java线程同步机制中的关键概念,包括wait和notify方法的作用与使用场景,对比sleep方法的区别,以及这些方法如何影响锁的持有状态。通过实例解析,帮助读者理解在多线程环境下如何有效利用这些方法进行线程间的协调。
Java多
线程间通信
-解决安全
问题
、等待唤醒机制
本文探讨了Java中多线程间的通信
问题
,重点关注如何解决安全
问题
及实现等待唤醒机制。通过实例和参考文章,介绍了确保线程安全的方法,帮助开发者理解并掌握Java并发编程的关键技巧。
Java 多
线程间通信
多生产 多消费
问题
本文介绍了一个典型的生产者消费者模式实现案例,通过Java多线程演示了如何使用synchronized关键字及wait、notify方法来协调多个生产者与消费者线程间的同步
问题
,避免数据错误和死锁。
C#
111,129
社区成员
642,535
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章