今天在编写多线程通讯的时候,关于共享资源的操作不冲突,应用互斥锁方面有些不是很清楚,通过编写一些例子和看书的解释说明,在这里我做下我对这方面的总结:
mutex 是一种简单的加锁的方法来控制对共享资源的存取。这个互斥锁只有两种状态,
也就是上锁和解锁,可以把互斥锁看作某种意义上的全局变量。在同一时刻只能有一个线程
掌握某个互斥上的锁,拥有上锁状态的线程能够对共享资源进行操作。若其他线程希望上锁
一个已经上锁了的互斥锁,则该线程就会挂起,直到上锁的线程释放掉互斥锁为止。可以说,
这把互斥锁使得共享资源按序在各个线程中操作。
互斥锁的操作主要包括以下几个步骤。
· 互斥锁初始化:pthread_mutex_init
· 互斥锁上锁:pthread_mutex_lock
· 互斥锁判断上锁:pthread_mutex_trylock
· 互斥锁接锁:pthread_mutex_unlock
· 消除互斥锁:pthread_mutex_destroy
互斥锁分为三种:1.快速互斥锁 2.递归互斥锁 3.检错互斥锁。
其实看了书才知道这三种锁的主要区别在于其他没有占有互斥锁的线程在希望得到互斥锁是否需要阻塞等待。
快速锁是在调用线程会阻塞到拥有互斥锁的线程解锁为止。
递归互斥锁能够成功的返回并且增加调用线程在互斥上加锁的次数。
检错互斥锁是非阻塞模式,直接返回并且返回一个错误信息。