上一篇简单介绍了pthread_mutex_t的使用,这里将介绍pthread_mutex_t的递归锁的使用
#import "pthreadMutexRecursiveVC.h"
#import <pthread.h>
@interface pthreadMutexRecursiveVC ()
@property (assign, nonatomic) pthread_mutex_t lock1;
@end
@implementation pthreadMutexRecursiveVC
- (void)viewDidLoad {
[super viewDidLoad];
[self __initMutex:&_lock1];
[self test1];
}
- (void)__initMutex:(pthread_mutex_t *)mutex {
// #define PTHREAD_MUTEX_INITIALIZER {_PTHREAD_MUTEX_SIG_init, {0}}
// self.mutex = PTHREAD_MUTEX_INITIALIZER; // 静态初始化方法
// 1.初始化属性
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
/*
* Mutex type attributes
*/
// #define PTHREAD_MUTEX_NORMAL 0
// #define PTHREAD_MUTEX_ERRORCHECK 1
// #define PTHREAD_MUTEX_RECURSIVE 2
// #define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL
// pthread_mutexattr_settype(&attr, NULL); 传空,默认 PTHREAD_MUTEX_DEFAULT
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); // 递归锁
// 2.初始化锁
pthread_mutex_init(mutex, &attr);
// 3.销毁属性
pthread_mutexattr_destroy(&attr);
}
- (void)test1 {
pthread_mutex_lock(&_lock1);
static int count = 0;
NSLog(@"%s--%d",__func__,count);
if (count < 10) {
count ++;
[self test1];
}
pthread_mutex_unlock(&_lock1);
}
- (void)dealloc {
// 不用需要销毁
pthread_mutex_destroy(&_lock1);
}
@end