一个线程就是一个执行程序的事例。线程允许一个程序同时在多于一个地方运行,这有些像多个CPU,每一个CPU执行程序的一部分。在单处理器系统中,只有同时处理才出现线程。 =================================================== 线程应该是应用程序里的一个执行序列,而Windows在用CreateThread创建线程的时候,最重要的一个参数就是“Start Address”,这其实被定义为一个函数指针,原型是DWORD WINAPI ThreadProc(LPVOID lpParameter)。在多处理器机器中,理想的情况下,每个线程都在一个独立的CPU上运行,而在单处理器系统里,操作系统通过给每个线程一个运行时间片来模拟所谓的“同时运行”。但是这种“同时”是宏观上看起来的表现,实际上在某个特定的时刻只有一个线程在运行,这与多处理器的机器是不同的。在多处理器的机器上,有人就建议一个程序开的线程数量最多不要超过CPU的数量,应为系统在一个CPU上模拟多线程是要付出不小的开销的。有一点特别重要,单处理器机上,一个线程除非是自己要求挂起自己的,否则不能假设自己会在什么时候被切换出去。 不,每一个线程本身没有SS寄存器和相互依存,实际上,每一个线程在本身所在进程的地址空间内部有一个地址 空间。 =================================================== 《箴言》中这句话不知道如何理解。但是,每个线程拥有独立的堆栈显然是无比重要的,这是线程机制能够实现的基本要求之一。按照 尤晋元、史美林等编著的《Windows操作系统原理》中的论述,每个线程都和其相联系的进程共享地址空间,线程之间的通讯也及其直接,通过带锁的全局变量就可以安全的进行了。 线程于GDI的冲突:死机的主要原因。 =================================================== 对于这个论题,我写了个程序测试了一下,把结果给大家说说。程序是一个用VC向导生成的基于对话框的程序。然后程序生成11个线程,每个线程都一样,用对话框窗口的DC随机画直线,每个线程的两次循环里随机Sleep一个小时间片,其值是10毫秒到30毫秒之间。这个程序我运行了大概有10分钟,并且一直有其他程序窗口在对话框上移动。结果是并没有出现《箴言》中所说的死锁的情况。如果大家有像《箴言》中那样出现死锁的程序,请发一份给我,谢谢:-) 当线程用到C的标准库的时候,很容易导致冲突。 =================================================== 最原始的C标准库是不支持多线程的,其中最重要的原因就是C库里有全局变量。典型的就是这个表示错误号的errno,你想想,在多线程的环境里,大家都调C库,而errno是个全局变量,那么一旦错误发生,那么errno属于哪个线程呢?这个时候就必须链接C库的多线程版本了。所以应该是当线程用到单线程的C标准库时很容易导致冲突。 |
正在阅读:《编程高手箴言》读后感(3)《编程高手箴言》读后感(3)
2004-04-07 10:02
出处:CSDN
责任编辑:sdq
键盘也能翻页,试试“← →”键