Ch 12 线程控制
线程限制
可以通过 sysconf 函数进行查询,其中含有 以 linux 系统为例 线程退出时操作系统实现销毁线程特定数据的最大次数:4 进程可以创建的线程KEY的最大个数:1024 一个线程栈的最小字节数:16384,大约为 16 K 一个进程可创建的最大线程数:没有确定的限制
线程状态
可结合和分离 默认是可结合的:意思是可以被其他线程回收或者杀死的 分离:其资源是不能被别的线程收回和杀死的,只有等到线程结束才能由系统回收
重入
如果一个函数在同一时间点可以被多个线程安全地调用,那么就称这个函数是线程安全的,表明是可重入的
线程私有数据
errno 就是典型的线程私有数据 需要使用键值来获取线程私有数据
线程和 fork
线程调用 fork 会为子进程创建地址空间副本,还从父进程继承每个互斥量,读写锁和条件变量的状态,如果不紧接着调用 exec的话就需要清理锁的状态,因此 fork 的时候需要调用 pthread_atfork
线程与 IO
考虑两个线程同时读同一个文件,它们共享同一个文件描述符,先 lseek 定位,然后 read 读取。在多线程环境中会出现不一致的问题,因此使用 pread 和 pwrite 可以让线程进行原子的读写,以此来解决并发线程对同一文件进行读写操作的问题