由于线程共享进程的资源和地址空间,因此在对这些资源进行操作时,必须考虑到线程间资源访问的同步与互斥问题。
互斥锁
原子操作。这个互斥锁只有两种状态,也就是上锁(lock)和解锁(unlock),可以把互斥锁看作某种意义上的全局变量。即某线程上锁即表示对共享的资源拥有操作权限)。按顺序进行原子操作。非负的整数计数器(sem_val=>0),它被用来控制对公共资源的访问,广泛用于进程或线程间的同步与互斥。sem_val--,而一次 V 操作使 sem_val++。sem_val>=0,该进程(或线程)具有公共资源的访问权限;相反,当信号量 sem < 0,该进程(或线程)就将阻塞直到信号量 sem >=0 为止。pthread_create()函数的第二个参数(pthread_attr_t *attr)表示线程的属性,缺省属性值是NULL。
pthread_join()函数返回时,创建的线程才能释放自己占用的系统资源。pthread_create()函数返回之前就终止了,其终止以后就可能将线程号和系统资源移交给其他的线程使用,这时调用pthread_create()的线程就得到了错误的线程号。