多线程编程指南
1. 多线程编程概述
多线程编程需要从单线程思维转变为多线程思维。以下是多线程编程中需要关注的几个关键主题:
- 重新思考全局变量
- 处理静态局部变量
- 线程同步
- 避免死锁
- 线程代码的基本准则
- 创建和使用线程
- 多处理器编程
2. 重新思考全局变量
在单线程编程中,代码设计通常基于以下隐含假设:
- 写入全局变量后立即读取,读取的值就是刚刚写入的值。
- 写入非全局静态存储变量后立即读取,读取的值就是刚刚写入的值。
- 由于不存在并发访问,不需要进行同步操作。
然而,在多线程环境中,这些假设会引发问题。以传统的 C 和 UNIX 系统调用错误处理为例,系统调用失败时会返回 -1,实际的错误代码会存储在全局变量errno中。
extern int errno; ... if (write(file_desc, buffer, size) == -1) { /* the system call failed */ fprintf(stderr, "something went wrong, " "error code = %d\n", errno); exit(1); } ...在多线程环境中,如果两个线程几乎同时失败且错误不同,它们都期望在errno中找到自己的错误代码,但一个