上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.5.1 创建互斥量
互斥量有两种创建方式:由静态变量分配与调用函数动态地创建。静态方式是POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁;动态方式是采用pthread_mutex_init函数来初始化互斥锁。创建互斥量的方法如代码清单1-13所示。
代码清单1-13 创建互斥量
mutex为互斥量对象,mutexattr用于指定互斥锁属性,如果为NULL则使用默认属性。互斥锁的属性在创建锁的时候指定,在LinuxThreads实现中仅有一个锁类型属性,不同类型的锁在试图对已被锁定的互斥锁加锁时的表现不同。锁有4种类型,具体如表1-11所示。
表1-11 mutex锁类型
用PTHREAD_MUTEX_INITIALIZER创建的互斥量由系统自动回收,用pthread_mutex_init函数动态创建的互斥量需要手动调用pthread_mutex_destroy(pthread_mutex_t*mutex)函数来动态回收。
初始化互斥量之后,可以调用pthread_ mutex_ lock函数来获取互斥量锁,将互斥量设置为锁定状态。pthread_mutex_lock函数定义如代码清单1-14所示。
代码清单1-14 pthread_mutex_lock函数定义
如果互斥量当前处于未锁定状态,则调用pthread_mutex_lock函数会锁定互斥量并立即返回。如果其他线程已经锁定了当前互斥量,那么pthread_mutex_ lock函数调用会一直被阻塞,直至该互斥量被其他线程解锁,才能锁定互斥量并返回。pthread_mutex_lock返回0表示锁定成功,其他的值都表示失败。