各位看官们,大家好,上一回中咱们说的是线程同步之信号量的例子,这一回咱们说的例子是:线程同步之互斥量。闲话休提,言归正转。让我们一起talk C栗子吧!
看官们, 今天我们将介绍使用互斥量进行线程同步。互斥量的核心操作是加锁/解锁操作,我们可以使用相关的函数来进行加锁/解锁操作。接下来我们介绍与互斥量相关的函数。
pthread_mutex_init函数
int pthread_mutex_init (pthread_mutex_t *__mutex,const pthread_mutexattr_t *__mutexattr)
该函数用来对互斥量进行初始化。该函数有两个参数,接下来我们分别介绍他们。
- 第一个参数是指向互斥量的指针,函数会对该指针所指的互斥量进行初始化操作;
- 第二个参数是指向互斥量属性的指针,函数可以把互斥量属性的值修改成该指针所指变量的值;
- 该函数运行成功时返回零,否则返回相应的错误代码。
pthread_mutex_destroy函数
int pthread_mutex_destroy (pthread_mutex_t *__mutex)
- 该函数用来销毁互斥量相关的资源;
- 该函数只有一个参数,参数是指向互斥量的指针,函数会销毁与互斥量相关的资源;
- 该函数运行成功时返回零,否则返回相应的错误代码。
加锁操作的函数
int pthread_mutex_lock (pthread_mutex_t *__mutex)
- 该函数用来对互斥量进行加锁操作;
- 该函数只有一个参数,参数是指向互斥量的指针,函数会对该指针所指的互斥量进行加锁操作;
- 该函数运行成功时返回零,否则返回相应的错误代码。
使用该函数时需要注意以下两点事项:
- 如果互斥量已经被加锁,那么其它线程使用该函数加锁时会阻塞该线程,直到互斥量被解锁为止;
- 如果互斥量已经被加锁,那么同一线程对互斥量再次进行加锁,那么就会发生死锁;
int pthread_mutex_trylock (pthread_mutex_t *__mutex)
- 该函数用来对互斥量进行尝试性加锁操作;
- 该函数只有一个参数,参数是指向互斥量的指针,函数会对该指针所指的互斥量进行加锁操作;
- 该函数运行成功时返回零,否则返回相应的错误代码。
该函数可以看作是pthread_mutex_lock函数的补充,它对互斥量进行尝试性加锁操作,尝试性的含义就是说,如果互斥量已经被加锁,那么它不会去对互斥量进行重复加锁操作,因此,现线程不会被阻塞,更不会发生死锁,而是返回EBUSY。
pthread_mutex_unlock函数
int pthread_mutex_unlock (pthread_mutex_t *__mutex)
- 该函数用来对互斥量进行解锁操作;
- 该函数只有一个参数,参数是指向互斥量的指针,函数会对该指针所指的互斥量进行解锁操作;
- 该函数运行成功时返回零,否则返回相应的错误代码。
各位看官,关于线程同步之互斥量的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。