Windows多线程程序设计

来源:互联网 发布:mac如何网页看视频 编辑:程序博客网 时间:2024/06/06 15:01
英文名称: multithreading applications in Win32, 作者:Jim Beveridge & Robert Wiener
中文名称:Windows多线程程序设计,译者:侯俊杰
听说这本书是学习windows编程必须看的书,于是就看一看。
petzold的widnows 程序设计还没有看完,太厚了。但是,发现这本书也可以看一看,其中对于多线程的许多内容我是知道的,所以理解起来比较容易。

花点时间,应该很快就能看完吧!

2012.7.31

Windows中多线程和unix的多线程看起来,差不太多。

Windows NT以其SMP技术,支持多CPU机器。每一个CPU执行一个不同的线程。任何一个线程可能在任何时候被任何一个CPU执行。一个双CPU的系统可以同时执行同一进程(或不同进程)的两个线程。在一个SMP系统中,多个线程真的可能被同时调用。
多线程版本的C runtime library,可以防止在多线程时printf这样的函数被中断,会直到打印完成为止,再切换线程。
Win32核心对象清单:process,threads,files,events,semaphores,mutexes,Pipes.
全局变量不在heap中保存
线程ID是整个操作系统独一无二的。
GetEixtCodeThread可以判断线程是否正常退出了,并可以根据线程退出码lpExitCode来做一定的处理。
2012.8.1
临界区与mutex是有区别的,临界区用于线程间同步,而mutex用于多个进程之间的同步。mutex的开销要比临界区大得多!!

2012.8.6

在Win32中,mutex与semaphore这两种东西的拥有权(ownership)的意义完全不同,所以它们不能够交换使用。semaphores  不像 mu texes ,它并没有所谓的“wait abandoned”状态可以被其他线程侦测到。
WaitForSingleO bject()等待某个线程,WaitForMultipleObjects() 等待多个线程
2012.8.9
第四章
1. Event  对象之所以有大用途,正是因为它们的状态完全在你掌控之下。Mutexes  和 semaphores  就不一样了,它们的状态会因为诸如 WaitForSingleObject() 之类的函数调用而变化。所以,你可以精确告诉一个 event  对象做什么事,以及什么时候去做。 
2. PostMessage和SendMessage是不同的,一个立即返回,一个是等待那边处理完了再返回。

第5章 不要让进程成为脱缰的野马
    不要使用TerminateThread(),使用EVENT
第6 章 overlapped I/O
overlapped I/O   是 Win32  的一项技术,你可以要求操作系统为你传送数据,并且在传送完毕时通知你。这项技术使你的程序在 I/O  进行过程中仍然能够继续处理事务。
第7章 data consistency
1. C  和 C++  有一个鲜为人知的关键字,教导编译器如何在一个 variable-by-variable  的基础上采取行动。这个关键字是 volatile 。这个关键字告诉编译器不要持有变量的临时
性拷贝。它可以适用于基础类型,如 int  或 long,也适用于一整个 C  结构或 C++ 类。后面这种情况下,结构或类的所有成员都会被视为 volatile 。
2. Readers/Writers lock
第8章
1. 如果你写一个多线程程序,而且没有使用 MFC ,那么你应该总是和多线程版本的 C Run-tim e Library   链接,并且总是以 _beginthreadex()  和 _endthreadex()  取代 CreateThread()  和 ExitThread() 。_beginthreadex() 的参数和 CreateThread()  一样,并且承担适度的  C runtime library  初始化工作。
2. Visual C++  的折衷方案是提供两个版本的 C  runtime library 。一个版本给单线程程序使用,一个版本给多线程程序使用。多线程版有两个很大的差别,第一,如 errno  之流的变量,现在变成每个线程各拥有一个。第二,多线程版中的数据结构以同步机制加以保护。  
重要!   MFC 程序必须使用多线程版的  C runtime library ,否则你就会在链接时获得“undefined function ”的错误信息。
第10章
MFC中Worker线程和UI线程。
第17章 
COM的线程模型。

到现在为止,基本看完了一遍。这本书以Windows95/NT为参考,许多的东西太陈旧了吧?
但是,讲得很细!
匆匆掠过而已!
2012.8.22