1、线程
1.1、线程的基本概念
线程是进程中执行运算的最小单位,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
1.2、使用线程的好处
(1)易于调度;
(2)多线程可提高并发性:通过线程可方便有效地实现并发性,进程可创建多个线程来执行同一程序的不同部分;
(3)开销少:创建线程比创建进程要快,所需开销很少;
(4)有利于充分发挥多处理器的功能:通过创建多线程进程,每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运用。
2、线程间的通信方式
1、使用全局变量
由于属于同一个进程的各个线程共享操作系统分配给该进程的资源,故解决线程间通信最简单的一种方法是使用全局变量。对于标准类型的全局变量,我们建议使用volatile 修饰符,它告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。如果线程间所需传递的信息较复杂,我们可以定义一个结构,通过传递指向该结构的指针进行传递信息。
2、使用消息(消息队列)实现通信
在Windows程序设计中,每一个线程都可以拥有自己的消息队列(UI线程默认自带消息队列和消息循环,工作线程需要手动实现消息循环),因此可以采用消息进行线程间通信sendMessage,postMessage。
3、使用事件CEvent类实现线程间通信
Event对象有两种状态:有信号和无信号,线程可以监视处于有信号状态的事件,以便在适当的时候执行对事件的操作。
3、线程间的同步方式
3.1、同步和互斥的关系
各个线程可以访问进程中的公共变量,资源,所以使用多线程的过程中需要注意的问题是如何防止两个或两个以上的线程同时访问同一个数据,以免破坏数据的完整性。数据之间的相互制约包括:
1、直接制约关系(同步关系)———同步是指散布在不同进程之间的若干程序片段(线程),它们的运行必须严格按照规定的某种先后次序来运行,以实现访问者对资源或者数据的有序访问;即:一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒,因此线程之间直接制约