线程锁
来源:互联网 发布:生活用品的淘宝店名 编辑:程序博客网 时间:2024/06/16 13:43
一般发生于两个线程同时去访问一个方法或变量时,去进行操作变量,就可能会产生线程的崩溃
解决办法是,在A线程去操作的时候进行加锁,另一个线程无法访问,只有等待A执行完之后进行解锁,B线程才可以进行操作
不要将过多的代码放在锁里,否则一个线程执行的时候另一个线程就一直等待,无法发挥多线程的作用了
首先声明一个可变数组属性
@property(nonatomic,strong)NSMutableArray * nameArray;
懒加载
-(NSMutableArray *)nameArray {
if (!_nameArray) {
_nameArray = [NSMutableArray arrayWithObjects:@"张",@"王",@"李",@"赵",@"刘",@"孙", nil];
}
return _nameArray;
}
使用NSLock加锁
可以将NSLok声明称属性,并初始化
[lock lock];
if (self.nameArray.count > 0) {
[self.nameArray removeLastObject];
}
[lock unlock];
synchronized 线程锁
@synchronized (self) { NSString * name; if (self.nameArray.count > 0) { name = self.nameArray.lastObject; [self.nameArray removeObject:name]; }}
信号量
创建一个信号量为1
dispatch_semaphore_t semaphore = dispatch_semaphore_create(1); NSString * name;dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);if (self.nameArray.count > 0) { name = self.nameArray.lastObject; [self.nameArray removeObject:name]; NSLog(@"nameArr%@thread%@",self.nameArray,[NSThread currentThread]);}dispatch_semaphore_signal(semaphore);
pthread 中的锁
pthread_mutex_init(&mutex, NULL);
pthread_mutex_lock(&mutex);NSString * name;if (self.nameArray.count > 0) { name = self.nameArray.lastObject; [self.nameArray removeObject:name]; NSLog(@"nameArr%@thread%@",self.nameArray,[NSThread currentThread]);}pthread_mutex_unlock(&mutex);`
-(void)dealloc {
pthread_mutex_destroy(&mutex);
}
这几个常用的,其它的不熟,用的少,没有过多研究
参考:
http://www.cocoachina.com/ios/20160129/15170.html
https://www.cnblogs.com/wlll/p/5175361.html
http://blog.csdn.net/qq_30513483/article/details/52349968
http://www.jianshu.com/p/35dd92bcfe8c
- JAVA-线程/线程锁
- 线程及线程锁
- 线程池 线程锁
- 线程、锁、线程池
- 线程锁
- 线程锁
- 线程锁.
- 线程锁
- 线程锁
- 线程锁
- 线程、锁
- 线程锁
- 线程锁
- 线程锁
- 线程锁
- 线程锁
- 线程锁
- 线程锁
- 字典大致实现原理
- haproxy重定向修改路径
- sqoop /user/local/jdk1.8.0_131/bin/java:No such file or directory.........
- OpenCV-图像模糊,梯度、形态学变换
- 【java基础:net】基于TCP的文本文件上传Demonstration
- 线程锁
- linux服务mariadb
- sql server 中的隐形符号(不是空格的空字符)
- Struts2标签库
- 如何让自己的Android studio更加的个性化--Code Templates、SexyEditor
- PANDAS 数据合并与重塑(concat篇)
- leetcode 56. Merge Intervals
- Spark之RDD的Transformation操作
- HBase体系结构剖析--上