Linux操作系统线程同步:互斥(互斥)
互斥锁本质上是一个提供对共享资源的保护访问的锁。1。初始化:
在Linux的领导下,该线程的互斥的数据类型是pthread_mutex_t。在使用之前,对其初始化。
对于静态分配的互斥体,你可以将它设置为pthread_mutex_initializer,或者叫pthread_mutex_init。
对于动态分配的相互排斥,在初始化malloc,它是通过pthread_mutex_init初始化,和pthread_mutex_destroy。释放内存之前需要(免费)。
原型:
国际pthread_mutex_init(pthread_mutex_t *限制互斥,const pthread_mutexattr_t *限制属性);
国际pthread_mutex_destroy(pthread_mutex_t *互斥);
标题:
返回值:成功返回0,错误返回错误号。
说明:如果您使用默认的属性初始化互斥锁,你只需要设置属性为空的其他价值。未来.
2。互斥操作:
要访问共享资源,我们需要锁定互斥锁。如果互斥锁被锁定,调用线程将阻塞,直到互斥锁被解锁为止。在完成对共享资源的访问之后,我们必须解除互斥。
首先,让我们来说明锁函数:
标题:
原型:
国际pthread_mutex_lock(pthread_mutex_t *互斥);
国际pthread_mutex_trylock(pthread_mutex_t *互斥);
返回值:成功返回0,错误返回错误号。
注:具体谈trylock函数,这个函数是非阻塞模式,也就是说,如果没有锁定的互斥锁,trylock函数将把互斥锁,并访问共享资源的访问;如果互斥锁的trylock函数不会阻塞,等待直接返回EBUSY,资源共享在一个繁忙的状态表示。
再次,函数的解:
标题:
原型:int pthread_mutex_unlock(pthread_mutex_t *互斥);
返回值:成功返回0,错误返回错误号。
3。死锁:
死锁主要发生在多个依赖锁上。当一个线程试图用另一个线程以相反的顺序锁定互斥锁时,就会发生这种情况。如何避免死锁,是使用互斥技术需要注意的问题。
总的来说,有几个不成文的基本原则:
在共享资源的操作之前必须获得一个锁。
操作完成后,必须释放锁。
把锁尽可能地短些。
如果有多个锁,如果顺序是abc链接按钮,则释放的顺序也应该是ABC。
当线程出错时,它应该释放它得到的锁。