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多线程锁属性设置方法全部内容了,希望大家多多支持毛票票~
热门推荐
10 八一幼儿祝福语大全简短
11 公司乔迁食堂祝福语简短
12 婚礼结束聚餐祝福语简短
13 儿媳买车妈妈祝福语简短
14 毕业送礼老师祝福语简短
15 同事辞职正常祝福语简短
16 恭贺新婚文案祝福语简短
17 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短