iOS中常用的几种锁
时间:2019-01-11
本文章向大家介绍iOS中常用的几种锁,主要包括iOS中常用的几种锁使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 自旋锁
NSSpinLock ,它现在被废弃了,不能使用了,它是有缺陷的,会造成死锁。当低优先级线程访问了锁并执行了任务,这时恰好高的优先级线程也访问了锁,因为它的优先级较高,所以要优先执行任务,所以它会不停的访问该锁,并使得cpu大部分都用来访问该锁忙等了,造成低优先级的线程没有足够的cpu时机来执行任务,这样造成了死锁。 - 互斥锁
p_thread_mutex,NSLock,@synthronized这个顺序是按照性能排序的,也是我们常用的几个互斥锁。 - 递归锁
NSRecursiveLock,它是递归锁,它允许我们进行多次锁。 - 条件锁
NSCondition,条件锁我们调用wait方法就把当前线程进入等待状态,当调用了signal方法就可以让该线程继续执行,也可以调用broadcast广播方法。 - 信号量
semphone在一定程度也可以当互斥锁用,它适用于编程逻辑更复杂的场景,同时它也是除了自旋锁以为性能最高的锁。
- (void)mutexLock{
//pthread_mutex
pthread_mutex_t mutex;
pthread_mutex_init(&mutex,NULL);
pthread_mutex_lock(&mutex);
pthread_mutex_unlock(&mutex);
//NSLock
NSLock *lock = [[NSLock alloc] init];
lock.name = @"lock";
[lock lock];
[lock unlock];
//synchronized
@synchronized (self) {
}
}
- (void)RecursiveLock{
NSRecursiveLock *lock = [NSRecursiveLock alloc];
[lock lock];
[lock lock];
[lock unlock];
}
- (void)conditionLock{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
condition = [[NSCondition alloc] init];
[condition wait];
NSLog(@"finish----");
});
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[NSThread sleepForTimeInterval:5.0];
[condition signal];
});
}
- (void)semaphore{
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
dispatch_async(dispatch_get_global_queue(0, 0), ^{
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
NSLog(@"semaphoreFinish---");
});
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[NSThread sleepForTimeInterval:5.0];
dispatch_semaphore_signal(semaphore);
});
}
- 欲火焚身,心静则凉--只靠冲动是不能长久地
- 深入理解C#3.x的新特性(4):Automatically Implemented Property
- 增加网卡注意点
- 深入理解C# 3.x的新特性(1): Anonymous Type
- Linux基础(day65)
- 18.12 keepalived + LVS
- 学会JS只是知道了“是什么”,并不意味着你会用JS做什么
- Linux基础(day68)
- 启动zabbix 报错
- 深入理解C# 3.x的新特性(2):Extension Method[上篇]
- 深入理解C# 3.x的新特性(2):Extension Method[下篇]
- 19.13/19.14 配置邮件告警
- 19.12 添加自定义监控项目
- [原创]深入理解C# 3.x的新特性(3):从Delegate、Anonymous Method到Lambda Expression
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释