
iOS_多线程
文章平均质量分 85
jeffasd
这个作者很懒,什么都没留下…
展开
-
iOS 类的线程安全机制详解
iOS 类的线程安全机制详解Thread-Safe Classes and FunctionsThe following classes and functions are generally considered to be thread-safe. You can use the same instance from multiple threads without first acq...原创 2019-05-16 17:16:19 · 1090 阅读 · 0 评论 -
对iOS锁的一些研究
http://blog.youkuaiyun.com/meegomeego/article/details/39546765[objc] view plain copy #import #import #import #import #define ITERATIONS (1024*1024*32) -转载 2016-05-05 13:21:41 · 280 阅读 · 0 评论 -
iOS 多线程自己的理解
. 创建线程的平均开销: 内存堆栈: 主线程—— 1M , 子线程——512K时间: 基本可以忽略不计a. 不可改变的对象,通常是线程安全的b. 主线程负责处理响应事件线程安全的类和函数: NSArray, NSData, NSNumber.....非线程安全: NSBundle, NSCoder, NSArchiver, NSMutableArray只原创 2016-03-31 13:38:50 · 967 阅读 · 0 评论 -
自旋锁(spinlock) 解释得经典,透彻
http://blog.youkuaiyun.com/unbutun/article/details/5730037自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。 由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。转载 2016-05-05 12:02:10 · 19821 阅读 · 0 评论 -
iOS 等待条件满足再向下执行但不主卡线程NSRunLoop
源自:cocoachine问答当我们需要等一个异步的结果才能向下执行代码,写回调又很麻烦,功能相对简单的时候,就可以插入以下红色部分的代码。- (IBAction)start:(id)sender{pageStillLoading = YES;[NSThread detachNewThreadSelector:@selector(loadPageInBackground转载 2016-05-05 11:54:09 · 2713 阅读 · 0 评论 -
dispatch_sync死锁问题研究
http://www.jianshu.com/p/44369c02b62adispatch_sync死锁问题研究字数1035 阅读600 评论0 喜欢2首先,看看如下代码的输出是什么?- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"Hello"); dispatch转载 2016-05-15 16:59:18 · 794 阅读 · 0 评论 -
关于 @synchronized,这儿比你想知道的还要多
http://www.cocoachina.com/ios/20151103/14007.html因为原文一些内容写的不太准确,我按照我的理解做出了批注和补充。如果你已经使用 Objective-C 编写过任何并发程序,那么想必是见过 @synchronized 这货了。@synchronized 结构所做的事情跟锁(lock)类似:它防止不同的线程同时执行同一段代码。但在转载 2016-05-15 15:29:01 · 363 阅读 · 0 评论 -
NSLock/NSRecursiveLock/NSConditionLock/@synchronized 详细解释
NSLock/NSRecursiveLock/NSConditionLock/@synchronizedhttp://blog.sina.com.cn/s/blog_8c87ba3b0101ok8y.html使用NSLock类 在Cocoa程序中NSLock中实现了一个简单的互斥锁。所有锁(包括NSLock)的接口实际上都是通过NSLocking协议定义的,它定义转载 2016-05-15 15:27:40 · 761 阅读 · 0 评论 -
iOS @synchronized(self) 解释
这个东西其实就是 一个加锁。如果self 其他线程访问,则会阻塞。这样做一般是用来对单例 进行一个死锁的保护http://blog.youkuaiyun.com/swj6125/article/details/9791183@synchronized(self) {//something like this kGoableValue = _shareInstance;转载 2016-05-15 15:25:50 · 3072 阅读 · 0 评论 -
iOS dispatch_sync同步应用开发场景 自己的理解
dispatch_sync同步应用开发场景阻塞并行队列的执行,要求某一操作执行后再进行后续操作,如用户登录 确保块代码之外的局部变量确实被修改 dispatch_queue_t q = dispatch_queue_create("cn.gcddemo", dispatch_queue_concurrent); __block bool logon = no原创 2016-05-28 00:07:40 · 2498 阅读 · 0 评论 -
iOS多线程的初步研究(四)-- NSTimer
http://www.cnblogs.com/sunfrog/p/3257916.html理解run loop后,才能彻底理解NSTimer的实现原理,也就是说NSTimer实际上依赖run loop实现的。先看看NSTimer的两个常用方法:+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(转载 2016-05-28 00:02:17 · 312 阅读 · 0 评论 -
iOS: performSelectorOnMainThread waitUntilDone 参数详解
http://www.41443.com/HTML/iphone/20150126/300050.htmliOS 中performSelectorOnMainThread 参数 waitUntilDone 很多说这个参数在主线程无效,这样的说法是错误的,当这个参数为YES,时表示当前runloop循环中的时间马上响应这个事件,如果为NO则runloop会将这个事件加入runloop队列在合适原创 2016-05-17 15:16:33 · 5409 阅读 · 0 评论 -
iOS dispatch_set_target_queue 详解
dispatch_set_target_queue有两个作用,1是修改队列的优先级下面的实例代码就修改了队列的优先级,队列创建出来后,优先级都是默认的,可以通过dispatch_set_target_queue来修改优先级。2.让不同任务在同一个串行线程运行,下面演示了在并行线程运行的例子,表明在并行线程dispatch_set_target_queue 不能让任务按顺序执行//原创 2016-07-16 14:20:41 · 864 阅读 · 0 评论 -
iOS8 GCD多线程新特性QoS 设置队列优先级
iOS8 GCD多线程新特性QoS设置队列优先级Quality of Service(QoS)这是在iOS8之后提供的新功能,苹果提供了几个Quality of Service枚举来使用:user interactive, user initiated, utility和 background,通过这告诉系统我们在进行什么样的工作,然后系统会通过合理的资源控制来最高效的执行原创 2017-09-29 15:13:56 · 4663 阅读 · 0 评论 -
信号量和互斥锁详解 MarkDown版
信号量和互斥锁详解 参考链接1 参考链接2 参考链接3 参考链接4 信号量强调的是线程(或进程)间的同步:“信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在sem_wait的时候,就阻塞在那里)。当信号量为单值信号量是,也可以完成一个资源的互斥访问。 互斥锁(又名互斥量)强调的是资源的访问互斥:互斥锁是用在多线程多任务互斥的,一个原创 2017-06-14 10:42:10 · 527 阅读 · 0 评论 -
信号量和互斥锁详解 非MarkDown版
[参考链接1](http://blog.chinaunix.net/uid-24612247-id-2305050.html)[参考链接2](http://blog.youkuaiyun.com/tietao/article/details/7367827)[参考链接3](http://www.cnblogs.com/diyingyun/archive/2011/12/04/2275229.html)原创 2017-06-15 10:21:22 · 434 阅读 · 0 评论 -
线程条件变量pthread_cond_t和线程条件锁详解
线程条件变量pthread_cond_t和线程条件锁详解条件变量常与互斥锁同时使用,达到线程同步的目的:条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足。APUE上,关于条件锁。其中有2条总结:1.使用条件锁前必须先锁住对应的互斥锁。2.条件锁进入阻塞(pthread_cond_wait)时自动解开对应互斥锁,而一旦跳出阻塞立即再次取得互斥锁,而这两个操作都是原子操作。示例代原创 2017-06-14 10:08:45 · 1120 阅读 · 0 评论 -
iOS dispatch_barrier_async 函数使用
//// ViewController.m// test_dispatch_assync_barry_01//// Created by jeffasd on 17/4/26.// Copyright © 2017年 jeffasd. All rights reserved.//#import "ViewController.h"@interface ViewContr原创 2017-04-26 14:01:07 · 1090 阅读 · 0 评论 -
关于NSMutableArray线程安全的思考和实现
http://blog.youkuaiyun.com/kongdeqin/article/details/53171189数组线程安全的思考NSMutableArray是线程不安全的,当有多个线程同时对数组进行操作的时候可能导致崩溃或数据错误,下面是我对线程安全的几个思路,希望由此能给你带来一些思路,如果有错误的地方还希望大家能够指出 1.对数组的读写都加锁,虽然数组是线程安全转载 2017-04-26 13:47:21 · 1189 阅读 · 0 评论 -
条件变量pthread_cond_t怎么用
http://blog.youkuaiyun.com/zclongembedded/article/details/7337729关于一点pthread_cond_t条件锁的思考以及实验转:http://blog.youkuaiyun.com/aniao/article/details/5802015APUE上,关于条件锁。其中有这么几条总结:1.使用条件锁前必须先锁住对应的互斥锁。转载 2017-05-11 19:37:19 · 568 阅读 · 0 评论 -
FMDB多线程下"is currently in use" 或者 "database is locked" 问题
http://www.tuicool.com/articles/UzMZRf问题一: “is currently in use” 出现的场景是这样的,多线程操作数据库,每个线程都使用了FMDatabase实例(注意没有使用FMDatabaseQueue)。问题二:“database is locked”出现的场景是这样的,多线程操作数据库,每个线程各自创建了FMDataba转载 2016-09-09 19:28:09 · 2129 阅读 · 0 评论 -
iOS GCD定时器
//// ViewController.m// test_gcd_time_01//// Created by jeffasd on 16/8/18.// Copyright © 2016年 jeffasd. All rights reserved.// GCD 定时器代码多 在这里备份下 下次直接使用#import "ViewController.h"@interf原创 2016-08-18 18:21:13 · 1383 阅读 · 0 评论 -
iOS 信号量详解
//// ViewController.m// test_if_else_01//// Created by jeffasd on 16/8/17.// Copyright © 2016年 jeffasd. All rights reserved.//#import "ViewController.h"@interface ViewController (){原创 2016-08-17 23:53:09 · 2313 阅读 · 0 评论 -
iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
http://www.cnblogs.com/sunfrog/p/3262624.html前面提到可以将NSTimer手动加入NSRunLoop,Cocoa库也为其它一些类提供了可以手动加入NSRunLoop的方法,这些类有NSPort、NSStream、NSURLConnection、NSNetServices,方法都是[scheduleInRunLoop:forMode:]形式转载 2016-05-28 00:00:58 · 332 阅读 · 0 评论 -
iOS RunLoop 自己的理解
runloop是一个看似很神秘的东西,其实一点也不神秘。每个线程都有一个实际已经存在的runloop。比如我们的主线程,在主函数的UIApplication中: UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]))系统就为我们将主线程的main runloop隐式的启动了。runloop顾名原创 2016-05-28 00:00:01 · 446 阅读 · 0 评论 -
iOS多线程开发(四)---线程同步
http://blog.chinaunix.net/uid-24862988-id-3413857.html线程同步4-1 同步工具1,原子操作2,内存屏蔽和volatile变量只确保每次操作都是从内存中获取信息,而不用寄存器内保存的数据OSMemoryBarrier函数,设置内存屏蔽volatile变量3,锁Table 4-转载 2016-03-31 13:50:24 · 711 阅读 · 0 评论 -
iOS系统GCD学习(5):信号量机制
http://blog.youkuaiyun.com/huifeidexin_1/article/details/9494975当我们在处理一系列线程的时候,当数量达到一定量,在以前我们可能会选择使用NSOperationQueue来处理并发控制,但如何在GCD中快速的控制并发呢?答案就是dispatch_semaphore,对经常做unix开发的人来讲,我所介绍的内容可能就显得非常入门级了,转载 2016-03-31 13:49:42 · 415 阅读 · 0 评论 -
IOS多线程开发其实很简单
http://blog.youkuaiyun.com/shenjie12345678/article/details/44152605大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算。可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行。但是机器码是按顺序执行的,一个复杂的多步操作只能一步步按顺序逐个执行。改变这种状况可以从两个角度出发:对于单核转载 2016-03-31 13:48:49 · 883 阅读 · 0 评论 -
高效编程之互斥锁和自旋锁的一些知识
http://www.cnblogs.com/hdflzh/p/3716156.html两种锁的加锁原理互斥锁:线程会从sleep(加锁)——>running(解锁),过程中有上下文的切换,cpu的抢占,信号的发送等开销。自旋锁:线程一直是running(加锁——>解锁),死循环检测锁的标志位,机制不复杂。两种锁的区别互斥锁的起始原始开销要高于自转载 2016-03-31 13:47:10 · 500 阅读 · 0 评论 -
自旋锁和互斥锁区别
http://blog.youkuaiyun.com/kyokowl/article/details/6294341POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API。线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用就是用Pthreads提供的锁机制(lock)来对多个线程之间共 享的临界区(C转载 2016-03-31 13:46:31 · 419 阅读 · 0 评论 -
iOS 多线程 锁 互斥 同步
http://blog.youkuaiyun.com/likendsl/article/details/8568961/在iOS中有几种方法来解决多线程访问同一个内存地址的互斥同步问题:方法一,@synchronized(id anObject),(最简单的方法)会自动对参数对象加锁,保证临界区内的代码线程安全[cpp] view plain copy转载 2016-03-31 13:45:55 · 456 阅读 · 0 评论 -
多线程(四)--非阻塞同步,CAS 原理分析
http://greemranqq.iteye.com/blog/2031806一、序言 前面我们提到的synchronized 等锁机制是一种阻塞同步,虽然它完成了我们的原子性操作,和线程安全,但是这种阻塞同步机制是比较耗费性能的,因为在阻塞和唤醒等状态转换中,是需要CPU指令进行帮忙实现,这要的调度是比较耗时的,因此这种策略是一种悲观策略,当然我们需要线程转载 2016-03-31 13:45:13 · 430 阅读 · 0 评论 -
iOS GCD NSOperation NSThread等多线程各种举例详解
http://www.tuicool.com/articles/qqy2muv2年多的iOS之路匆匆而过,期间也拜读来不少大神的博客,近来突然为自己一直做伸手党感到羞耻,是时候回馈社会。回想当年自己还是小白的时候,照着一些iOS多线程教程学,也只是照抄,只知其然、不知其所以然。现写一篇详细教程奉献给广大读者。废话就不多说了,直接上干货。如下图列举了很多多线程的知识点,每个知识点都写转载 2016-03-31 13:44:02 · 493 阅读 · 0 评论 -
并发 并行 同步 异步 多线程 阻塞 非阻塞的区别
http://www.mamicode.com/info-detail-656895.html1. 并发(concurrency):在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥互斥:进程间相互排斥的使用临界资源的现象,就叫互斥。同步(synchronous):进程之转载 2016-03-31 13:42:46 · 3696 阅读 · 1 评论 -
浅谈iOS开发中方法延迟执行的几种方式
http://www.jianshu.com/p/6ed28a29b391Method1. performSelector方法Method2. NSTimer定时器Method3. NSThread线程的sleepMethod4. GCD公用延迟执行方法- (void)delayMethod{ NSLog(@"delayMethodEnd");}转载 2016-03-31 13:41:37 · 450 阅读 · 0 评论 -
iOS同步对象性能对比(iOS锁性能对比)
http://lijianfei.sinaapp.com/?p=655&utm_source=tuicool&utm_medium=referral在iOS开发中,支持多种同步方法,我们从耗时角度出发,评估各种同步对象的性能。@synchronizedNSLockNSConditionNSConditionLockNSRecursiveLockpthread_mutex_t转载 2016-03-31 13:52:23 · 1311 阅读 · 0 评论 -
起底多线程同步锁(iOS)
http://www.cocoachina.com/ios/20160129/15170.html本文为投稿文章,作者:SpringOx(博客)iOS/MacOS为多线程、共享内存(变量)提供了多种的同步解决方案(即同步锁),对于这些方案的比较,大都讨论了锁的用法以及锁操作的开销,然后就开销表现排个序。春哥以为,最优方案的选用还是看应用场景,高频接口PK低频接口、有转载 2016-03-31 13:53:07 · 504 阅读 · 0 评论 -
iOS多线程的初步研究(六)-- NSOperation
http://www.cnblogs.com/sunfrog/p/3279542.htmliOS平台提供更高级的并发(异步)调用接口,让你可以集中精力去设计需完成的任务代码,避免去写与程序逻辑无关的线程生成、运行等管理代码。当然实质上是这些接口隐含生成线程和管理线程的运行,从而更加简洁地实现多线程。下面先来研究NSOperation和NSOperationQueue类的使用。转载 2016-05-27 23:18:56 · 317 阅读 · 0 评论 -
iOS多线程的初步研究(十)-- dispatch同步
http://www.cnblogs.com/sunfrog/p/3313424.htmlGCD提供两种方式支持dispatch队列同步,即dispatch组和信号量。一、dispatch组(dispatch group)1. 创建dispatch组dispatch_group_t group = dispatch_group_create(); 2转载 2016-05-27 23:17:56 · 327 阅读 · 0 评论 -
iOS多线程的初步研究(八)-- dispatch队列
http://www.cnblogs.com/sunfrog/p/3305614.html?utm_source=tuicool&utm_medium=referralGCD编程的核心就是dispatch队列,dispatch block的执行最终都会放进某个队列中去进行,它类似NSOperationQueue但更复杂也更强大,并且可以嵌套使用。所以说,结合block实现的GCD,转载 2016-05-27 23:16:33 · 352 阅读 · 0 评论