14.3.3 线程间通信
一个线程中通常涉及多个线程,那么线程间的通信是一个很重要的问题,什么是线程的通信问题呢?举个例子来说,在一个应用程序中有两个线程,一个线程负责接收用户的输入,另一个负责数据统计,那么负责数据统计的线程所使用的数据是接收线程的数据,因此这就属于线程间的通信问题。
程序设计中的任何通信方式都可以用于线程通信之中,例如:发送消息、内存映射等,一个进程的所有线程都处于此进程的地址空间中,这样线程的通信与进程相比要简单很多。
一般而言,应用程序中的一个次要线程总是为主线程执行特定的任务,这样,主线程和次要线程间必定有一个信息传递的渠道,也就是主线程和次要线程间要进行通信。这种线程间的通信不但是难以避免的,而且在多线程编程(www.cppentry.com)中也是复杂和频繁的,下面将进行说明。
1.使用全局变量
对于一个进程来说,它可以创建多个线程。每一个线程都可以使用系统分配给该进程的所有资源。因此线程之间的通信就可以使用一个共享的内容进行,这就是全局变量。使用全局变量时,每一个线程都可以改变该变量的值,因此在其他线程中就可以访问到被改变了的变量,这就是使用全局变量的基本原理。
2.使用自定义消息
如果一个线程中需要对另外的线程产生影响,甚至说要控制其他的线程。那么此时采用全局变量进行通信已经不会产生作用。因为即使一个线程改变了全局变量,那么另外的线程什么时候访问的该全局变量是不受控制的,因此必须产生新的通信机制。在Windows程序中采用的是消息驱动的形式。因此可以使用消息来控制线程的执行。
所谓的消息通信是指在一个线程的执行函数中,利用Windows系统中的消息传递函数向另一个线程发送自定义的消息。当一个线程发出一条消息时,操作系统首先接收到该消息,然后把该消息转发给目标线程。目标线程可以根据消息内容作出响应,这就是利用消息进行线程通信的基本原理。
【责任编辑:
云霞 TEL:(010)68476606】