读书笔记之UNIX环境高级编程(11)

来源:互联网 发布:js清空select选中的值 编辑:程序博客网 时间:2024/06/07 03:59
线程
1.像每个进程有一个进程ID一样,每个线程也有一个线程ID。进程ID在整个系统中是唯一的,进程ID相同,但线程ID不同,线程ID只在它所属的进程环境有效
2.每个进程只有一个控制线程即main线程
3.线程创建时并不能保证哪个线程会先运行:是新创建的线程还是调用线程
4.主线程需要休眠,如果不休眠,就可能先退出,这样在新线程有机会运行之前整个进程可能就已经终止了
5.如果进程中的任意线程调用了exit,_Exit,或者_exit,那么整个进程会终止。调用pthread_exit不终止整个进程
6.pthread_join一直阻塞,直到指定的线程调用pthread_exit,或者返回
7.如果线程处于分离状态,那么pthread_join调用就会失败
8.同一进程的线程的栈有会被其他线程栈覆盖的可能性,可以使用全局变量或堆变量
9.如果锁的粒度太粗,就会出现多线程阻塞等待相同的锁,如果太细,会影响系统性能
10.读写锁可以有三种状态:读模式下加锁状态,写模式下加锁状态,不加锁状态。一次只有一个线程可以占有写模式的读写锁,但是多个线程可以同时占有读模式的读写锁

11.因为是在while循环检查条件,所以不会出现问题:线程醒来,发现队列为空,然后返回继续等待。如果代码不能容忍这种竞争,就要在向线程发送信号时占有互斥量

12.cond_wait的作用就是等待信号通知

0 0
原创粉丝点击