1、一个线程以下列方式之一来终止:
2、线程通过调用pthread_join函数等待其他线程终止.该函数会阻塞,直至要等待的线程终止 ,然后回收已终止线程占用的所有存储器资源.
3、在任何一个时间点上,线程是可结合的(detached)或者分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死.在被其他线程回收之前,它的存储器资源(例如栈)是没有被释放的.相反,一个分离的线程是不能被其他线程回收和杀死的,它的存储器资源在它终止时由系统自动释放.
4、默认情况下,线程被创建成可结合的.为了避免存储器泄露,每个可结合的线程都应该要么被其他线程显式地收回,要么通过调用pthread_detach函数被分离.线程能够通过以pthread_self()为参数的pthread_detach调用来分离他们自己.
5、从一个程序员的角度来看,线程很有吸引力的一个方面就是,多个线程很容易共享相同的程序变量.
6、我们说一个变量是共享的,当且仅当它的一个实例被一个以上的线程引用.
7、共享变量是十分方便的,但是它们也引入了同步错误(synchronization error)的可能性.
8、一般而言,你没有办法预测操作系统是否将为你的线程选择一个正确的顺序.
9、信号量提供了一种很方便的方法来确保对共享变量的互斥访问.其基本思想是是,将每个共享变量(或者一组相关的共享变量)与一个信号量s(初始为1)联系起来,然后用P(s)和V(s)操作将相应的临界区包围起来.以这种方式来保护共享变量的信号量叫做二元信号量(binary semaphore),因为它的值总是0或者1.以提供互斥为目的的二元信号量常常也称为互斥锁(mutex).
10、进度图给了我们一种较好的方法,将在单处理器上的并发程序执行可视化,也帮助我们理解为什么需要同步.然后,它们也有局限性,特别是对于在多处理器上的并发执行,在多处理器上一组CPU/高速缓存对共享同一个主存.多处理器的工作方式是进度图不能解释的.
11、