分类: 系统运维
2011-03-21 21:17:18
12.3
...pthread_attr_destory不但释放内存,还要在里边填些东西,这样在调用pthread_create是如果传送了已经释放掉的pthread_attr_t结构,就会返回错误.这种处理方法是比较反传统的,当然不是说不好.
...如果我们不关心一个线程的终止状态,可以将其设为detach状态,表示有os去处理线程退出后的资源,因此,对一个处于detach状态的线程调用pthread_join是非法的.
...pthread_attr_destory不论成功还是失败,应用程序都没有办法处理,所以无需检查这个函数的返回值.
12.4
...PTHREAD_PROCESS_PRIVATE表示只能在进程内部共享一个mutex,而PTHREAD_PROCESS_SHARED表示可以在多个进程间共享在某个内存区域中分配的mutex,以同步这些进程.
...不要把recursive mutex跟条件变量关联起来使用.因为recursive mutex可能已经被lock了许多次,但是在pthread_cond_wait中只会unlock一次,这时候的mutex可能没有真正释放.
...如果不使用recursive mutex,func1在调用func2之前lock了这个mutex,而在func2中再次lock的时候就会死锁.
12.5
...线程安全并不等于异步信号安全,也就是说一个函数对于多线程是可重入的,但并不就等于对信号处理也是可重入的.
...操作FILE对象的标准I/O例程都必须是线程安全的,这些例程会在内部调用flockfile与funlockfile.
12.6
...一个进程中的所有线程可以使用同一个key,每一个线程都要通过这个key跟各自的私有数据区关联起来.也就是说,一个进程里所有需要key的线程所创建的key可以是同一个key,并把各自的私有数据跟这个key关联起来.当然,一个线程创建多个key也是允许的.而对这片数据区的访问是通过pthread_getspecific函数返回的指针进行的,这个指针必然可以保证每个不同的线程是不一样的.
12.7
...当线程调用那些可能会等待或者挂起的调用的时候,就会进入取消点.
12.8
...每一个线程可以独立的堵塞信号,但是如果一个线程改变了与某个给定信号相关的处理,那么所有的线程都会共享这一改变.
...除了硬件错误或者定时器事件会传递给引发这一事件的线程外,其余信号会传给任意一个线程.
...调用sigwait前线程必须block相关的信号,否则在线程调用sigwait的过程中如果有信号到来而此时sigwait的调用动作尚未完成,也就是说这时候线程还没有进入等待信号的状态,那么这个信号就有可能丢失.
...在线程中使用sigwait来处理信号而不是传统的信号句柄来处理.
12.9
...在线程中fork的时候,子进程将只存在这个在父进程中调用fork的线程
...子进程将继承父进程所有的锁,但是由于子进程并不包含保持这些锁的子进程,因此子进程无法知道应该那些锁应该解锁.