线程间通信——数据传递和同步
来源:互联网 发布:网络推广客服是干嘛的 编辑:程序博客网 时间:2024/05/30 12:30
线程间通信会产生两个问题:一个是如何传递数据,另一个是如何同步。
1、线程间数据传递
线程被创建后,我们无法利用线程的控制函数将数据从一个线程传递到另一个线程,然而,.NET本身的一个重要特性就是完全面向对象,即所有的函数都是放在类之中,因此,如果我们改变类成员变量的值,这种改变将会被附着在类函数上的线程看到。
线程间通过资源(包括类成员变量)传递数据
例如:下面的例子使用队列在两个线程之间进行数据传递。
public class SMTPNotification { private Queue notificationQueue; private string serverName; private Thread sendingThread; private SmtpClient client = new SmtpClient(); public SMTPNotification() { serverName = ""; client.Host = serverName; notificationQueue = new Queue(); sendingThread = new Thread(new ThreadStart(NotificationMethod)); sendingThread.Start(); } private void NotificationMethod() { while (true) { try { while (notificationQueue.Count > 0) { MailMessage message = (MailMessage)notificationQueue.Dequeue(); client.Send(message); } Thread.Sleep(1000); } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message); } } } public void SendNotification(string to, string from, string subject, string body) { MailMessage Message = new MailMessage(); Message.To.Add(to); Message.From = new MailAddress(from); Message.Subject = subject; Message.Body = body; notificationQueue.Enqueue(Message); } }
线程间数据传递会产生两个问题:
1)竞争
两个线程同时修改一个变量,后一个人的修改会覆盖前一个人的修改,这种情况叫做竞争。
2)死锁
当一个线程占用资源A而请求资源B,另一个线程占用资源B而请求资源A,两个线程都无法继续运行,这种情况叫做死锁。
2、线程间同步
线程间同步是指线程之间等待同步的过程。
- 线程间通信——数据传递和同步
- 线程通信和同步
- 线程同步和线程通信
- boost线程间通信和传递参数
- 线程间同步和进程间通信
- 进程间通信 和 线程间同步
- 进程间通信和线程同步结构图
- 线程同步--线程间通信
- 线程同步--线程间通信
- 线程通信方式同步方式和进程间通信方式.
- VC++多线程编程-线程间的通信和线程同步
- 多线程——线程间的同步通信
- Java基础——线程同步通信
- <>线程-异步通信和同步通信
- java线程级线程同步和通信
- 线程间数据传递
- java线程间通信[实现不同线程之间的消息传递(通信),生产者和消费者模型]
- 进程间通信和线程间同步区别
- 转载findcaiyzh的在自己的电脑上架个网站!Vista+IIS7+花生壳架设网站图文教程
- iOS-如何让xcode自动检查内存泄露
- Digg 顶 踩(jQuery+Ajax)
- 【优化】SQL优化34条
- SQLite3中针对Objective-c的持久层框架
- 线程间通信——数据传递和同步
- Mac OS X 10.7 Lion下载及安装办法
- 搜索引擎原理及其组成部分和功能
- Java——StringUtils
- Java——参数校验
- Jetty实战之 嵌入式运行Jetty实现简单文件服务器
- Java——ClassUtils
- 程序设计竞赛(acm)常用数据结构
- RedHat CEO:软件提供商的模式已经坏掉