- 新创建的线程可以访问进程的地址空间,并且继承调用线程的浮点环境和信号屏蔽字,但是该线程的挂起信号集会被清除
- 新线程时调用pthread_self函数获取自己的线程ID,而不是从共享内存中读出,或者从线程的启动历程中以参数的形式接收到的,因为新线程可能在主线程调用pthread_create返回之前就运行了,那么新线程看到的是未初始化的ntid的内容
- 单个线程可以通过3种方式退出
- 简单地从启动例程中返回,返回值是线程的退出码
- 线程可以被同一进程中的其他线程取消
- 调用pthread_exit
- pthread_exit函数的无类型指针参数所指向的结构所使用的内存在调用者完成调用以后必须是有效的(为了解决这个问题,可以使用全局结构或者用malloc函数分配结构)
- 当线程执行以下动作时,清理函数rtn是由pthread_cleanup_push函数调用的
- 调用pthred_exit时
- 响应取消请求时
- 用非零execute参数调用pthread_cleanup_pop时
进程原语 | 线程原语 | 描述 |
---|---|---|
fork | pthread_create | 创建新的控制流 |
exit | pthread_exit | 从现有的控制流中退出 |
waitpid | pthread_join | 从控制流中得到退出状态 |
atexit | pthread_cancel_push | 注册在退出控制流时调用的函数 |
getpid | pthread_self | 获取控制流的ID |
abort | pthread_cancel | 请求控制流的非正常退出 |
7. 可移植的程序并不能对使用何种处理器体系结构做出任何假设
8. 互斥机制要正常工作必须要求所有线程都设计成遵守相同数据访问规则
9. 读写锁(读共享写互斥)允许更高的并行性,当读写锁处于读模式锁住的状态,而这时有一个线程试图以写模式获取锁时,读写锁通常会阻塞随后的读模式锁请求,这样可以避免读模式锁长期占用,而等待的写模式锁请求一个得不到满足