pthread_attr_t 的缺省属性值 属性 值 结果 scope PTHREAD_SCOPE_PROCESS 新线程与进程中的其他线程发生竞争. detachstate PTHREAD_CREATE_JOINABLE 线程退出后,保留完成状态和线程 ID. stackaddr NULL 新线程具有系统分配的栈地址. stacksize 1M 新线程具有系统定义的栈大小. priority 0 新线程的优先级为0. inheritsched PTHREAD_EXPLICIT_SCHED 新线…
说到线程的分离状态,我认为,之所以会有这个状态,是因为系统对某些线程的终止状态根本不感兴趣导致的. 我们知道,进程中的线程可以调用: int pthread_join(pthread_t tid, void **rval_ptr): 来等待某个线程的终止,获得该线程的终止状态,并收回所占的资源.如果对线程的返回状态不感兴趣,可以将rval_ptr设置为NULL.也可以调用: int pthread_detach(pthread_t tid): 将此线程设置为分离状态,设置为分离状态的线程在线程结…
线程包含了表示进程内执行环境必需的信息,其中包括进程中标示线程的线程ID.一组寄存器值.栈.调度优先级和策略.信号屏蔽字.errno变量以及线程私有数据. 进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本.程序的全局内存和堆内存.栈以及文件描述符. 线程标识: 进程ID在整个系统中是唯一的,但线程ID不同,线程ID只在它所属的进程环境中有效.进程ID的数据结构为pid_t,线程ID的数据结构为pthread_t. 比较两个线程ID是否相等: #include <pthread.h…
条件变量变量也是出自POSIX线程标准,另一种线程同步机制.主要用来等待某个条件的发生.可以用来同步同一进程中的各个线程.当然如果一个条件变量存放在多个进程共享的某个内存区中,那么还可以通过条件变量来进行进程间的同步. 每个条件变量总是和一个互斥量相关联,条件本身是由互斥量保护的,线程在改变条件状态之间必须要锁住互斥量.条件变量相对于互斥量最大的优点在于允许线程以无竞争的方式等待条件的发生.当一个线程获得互斥锁后,发现自己需要等待某个条件变为真,如果是这样,该线程就可以等待在某个条件上,这样就不…
读写锁和互斥量(互斥锁)很类似,是另一种线程同步机制,但不属于POSIX标准,可以用来同步同一进程中的各个线程.当然如果一个读写锁存放在多个进程共享的某个内存区中,那么还可以用来进行进程间的同步, 互斥量要么是锁住状态要么是不加锁状态,而且一次只有一个线程可以对其加锁.读写锁可以有三种状态:读模式下的加锁状态,写模式下的加锁状态,不加锁状态. 一次只有一个线程可以占有写模式的读写锁,但是多个线程可以同时占有读模式的读写锁. 当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁(读或写…
并发度控制着用户级线程可以映射的内核线程或进程的数目.如果操作系统的实现在内核级的线程和用户级的线程之间保持一对一的映射,那么改变并发度并不会有什么效果,因为所有的用户级线程都可能被调度到.但是,如果操作系统的实现让用户级线程到内核级线程或进程之间的映射关系是多对一的话,那么在给定时间内增加可运行的用户级线程数,可能会改善性能. pthread_setconcurrency函数可以用于提示系统,表明希望的并发度. #include <pthread.h> int pthread_getconc…
一下代码主要实现了linux下线程创建的基本方法,这些都是使用默认属性的.以后有机会再探讨自定义属性的情况.主要是为了练习三种基本的线程同步方法:互斥.读写锁以及条件变量. #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <string.h> ; pthread_mutex_t mutex_lock; pthread_rwlock_t rw_lock; pthread_…
当线程调用fork时,就为子进程创建了整个进程地址空间的副本.子进程通过继承整个地址空间的副本,也从父进程那里继承了所有互斥量.读写锁和条件变量的状态.如果父进程包含多个线程,子进程在fork返回以后,如果紧接着不是马上调用exec的话,就需要清理锁的状态.     在子进程内部只存在一个线程,它是由父进程中调用fork的线程的副本构成的.如果父进程中的线程占有锁,子进程同样占有这些锁.问题是子进程并不包含占有锁的线程的副本,所以子进程没有办法知道它占有了哪些锁,并且需要释放哪些锁.     当…
互斥量(也称为互斥锁)出自POSIX线程标准,可以用来同步同一进程中的各个线程.当然如果一个互斥量存放在多个进程共享的某个内存区中,那么还可以通过互斥量来进行进程间的同步. 互斥量,从字面上就可以知道是相互排斥的意思,它是最基本的同步工具,用于保护临界区(共享资源),以保证在任何时刻只有一个线程能够访问共享的资源. 互斥量类型声明为pthread_mutex_t数据类型,在<bits/pthreadtypes.h>中有具体的定义. 1互斥量初始化和销毁 #include <pthread…
每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的.这意味着尽管单个线程可以阻止某些信号,但当线程修改了与某个信号相关的处理行为以后,所有的线程都必须共享这个处理行为的改变.这样如果一个信号选择忽略某个信号,而其他的线程可以恢复信号的默认处理行为,或者为信号设置一个新的处理程序,从而可以撤销上述线程的信号选择. 进程中的信号是送到单个线程的,如果信号与硬件故障或者计时器超时有关,该信号就被发送到引起该事件的线程中去,而其他的信号则被发送到任意一个线程.      sigprocm…