Linux多线程锁属性设置方法
互斥锁是Linux下多线程资源保护的常用手段,但是在时序复杂的情况下,很容易会出现死锁的情况。
可以通过设置锁的属性,避免同一条线程重复上锁导致死锁的问题。
通过intpthread_mutexattr_settype(pthread_mutexattr_t*attr,inttype)接口设置
一般是以下四种属性:
PTHREAD_MUTEX_NORMAL Thistypeofmutexdoesnotdetectdeadlock.Athreadattemptingtorelockthismutexwithoutfirstunlockingitwilldeadlock.Attemptingtounlockamutexlockedbyadifferentthreadresultsinundefinedbehaviour.Attemptingtounlockanunlockedmutexresultsinundefinedbehaviour. PTHREAD_MUTEX_ERRORCHECK Thistypeofmutexprovideserrorchecking.Athreadattemptingtorelockthismutexwithoutfirstunlockingitwillreturnwithanerror.Athreadattemptingtounlockamutexwhichanotherthreadhaslockedwillreturnwithanerror.Athreadattemptingtounlockanunlockedmutexwillreturnwithanerror. PTHREAD_MUTEX_RECURSIVE Athreadattemptingtorelockthismutexwithoutfirstunlockingitwillsucceedinlockingthemutex.TherelockingdeadlockwhichcanoccurwithmutexesoftypePTHREAD_MUTEX_NORMALcannotoccurwiththistypeofmutex.Multiplelocksofthismutexrequirethesamenumberofunlockstoreleasethemutexbeforeanotherthreadcanacquirethemutex.Athreadattemptingtounlockamutexwhichanotherthreadhaslockedwillreturnwithanerror.Athreadattemptingtounlockanunlockedmutexwillreturnwithanerror. PTHREAD_MUTEX_DEFAULT Attemptingtorecursivelylockamutexofthistyperesultsinundefinedbehaviour.Attemptingtounlockamutexofthistypewhichwasnotlockedbythecallingthreadresultsinundefinedbehaviour.Attemptingtounlockamutexofthistypewhichisnotlockedresultsinundefinedbehaviour.Animplementationisallowedtomapthismutextooneoftheothermutextypes.
这里主要指同一条线程重复上锁,不同线程上锁,无论设置什么属性,当锁已经被锁定后都会互斥阻塞。
使用PTHREAD_MUTEX_RECURSIVE属性,当同一条线程在没有解锁的情况下尝试再次锁定会返回成功。
以上就是小编为大家带来的Linux多线程锁属性设置方法全部内容了,希望大家多多支持毛票票~