多线程
Ansel_m
阿里天猫
展开
-
获取线程堆栈剩余大小
#import <pthread.h> pthread_t currentThread = pthread_self(); uint8_t *endStack = pthread_get_stackaddr_np(currentThread); size_t totalStackSize = pthread_get_stacksize_np(currentThread); u...原创 2020-04-04 00:41:51 · 1610 阅读 · 0 评论 -
iOS NSCondition
self.condition = [[NSCondition alloc] init]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSLog(@"-----------1111-----------");原创 2017-05-09 11:04:44 · 339 阅读 · 0 评论 -
NSThread Forever
self.thread= [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@{@"name": @"mmm"}]; [self.thread start]; - (void)run:(id)object { @autoreleasepool { [[原创 2017-05-09 10:32:51 · 348 阅读 · 0 评论 -
iOS NSOperation Wait
一. NSBlockOperation *block1 = [[NSBlockOperation alloc] init]; [block1 addExecutionBlock:^{ sleep(10); NSLog(@"------111----%@---", [NSThread currentThread]); }];原创 2017-05-10 11:01:28 · 234 阅读 · 0 评论 -
多线程中递归锁的实现.
在上一篇文章中,我已经阐述了多线程中简单锁的实现,可在结束的时候,我就提了那么一个问题,那就是如果在一个链表中进行插入时,要进行查询的操作,如果只是简单的锁,是没法实现的。所以“递归锁”就浮现于世了。 可能有些人看到递归这两个字,有点傻了眼,其实也没什么的,简单的介绍,就是进行简单的计数而已。刚开始引用锁的时候,就产生它,当在锁没有解开的时候,还要继续用锁,就简单的加一,解开一把就减一,当计转载 2017-06-14 16:48:07 · 422 阅读 · 0 评论 -
iOS 循环线程的实现
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSLog(@"--------"); [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(test原创 2015-08-14 11:43:43 · 5251 阅读 · 0 评论 -
线程属性pthread_attr_t简介
本文编辑整理自: http://hi.baidu.com/7828058/blog/item/256e16decd1a385e94ee3784.html http://www.ibm.com/developerworks/cn/linux/thread/posix_threadapi/part1/ Posix线程中的线程属性pthread_attr_t主要包括scope属性、转载 2017-09-21 11:43:37 · 279 阅读 · 0 评论 -
ios解决多线程忘记释放lock的
为了解决多线程忘记释放lock的问题,引入哨兵ThreadGuard #import @interface ThreadGuard : NSObject - (instancetype)initWithLock:(NSLock *)lock; - (void)unlock; @end #import "ThreadGua原创 2018-06-30 23:43:48 · 481 阅读 · 0 评论 -
获取任意线程调用栈的那些事
BSBacktraceLogger 是一个轻量级的框架,可以获取任意线程的调用栈,开源在我的GitHub,建议下载下来结合本文阅读。 我们知道NSThread有一个类方法callstackSymbols可以获取调用栈,但是它输出的是当前线程的调用栈。在利用 Runloop 检测卡顿时,子线程检测到了主线程发生卡顿,需要通过主线程的调用栈来分析具体是哪个方法导致了阻塞,这时系统提供的方法...转载 2019-09-26 10:34:18 · 583 阅读 · 0 评论 -
iOS读写锁
在OC中,如果有多个线程要执行同一份代码,那么有时候可能会出问题。一般采用锁来实现某种同步机制。在GCD出现之前,第一种是采用“同步Block”,另一个办法是使用NSLock对象。这两种都会遇到死锁现象。使用gcd,它能以简单、高效的形式为代码枷锁。 “串行同步队列”(serial synchronization queue)。将读取/写入都安排在同一个队列里,即可保证数据同...原创 2015-01-28 23:24:00 · 2053 阅读 · 1 评论 -
OS多线程的初步研究(九)-- dispatch源
dispatch源(dispatch source)和RunLoop源概念上有些类似的地方,而且使用起来更简单。要很好地理解dispatch源,其实把它看成一种特别的生产消费模式。dispatch源好比生产的数据,当有新数据时,会自动在dispatch指定的队列(即消费队列)上运行相应地block,生产和消费同步是dispatch源会自动管理的。 dispatch源的使用基本为以下步骤:转载 2014-08-18 18:17:06 · 4257 阅读 · 0 评论 -
iOS多线程的初步研究(一)
目录[-] iOS多线程的初步研究(一) 一、显式调用 二、隐式调用 通过NSObject的Category方法调用: 三、NSThread的其它一些常用的方法 四、一些非线程调用(NSObject的Category方法) 五、线程执行顺序 iOS多线程的初步研究(一) === 来源: http://www.cnblogs.com/sunfrog/p转载 2014-08-18 16:23:16 · 901 阅读 · 0 评论 -
iOS多线程的初步研究(二)-- 锁
谈到线程同步,一般指如何对线程间共享数据的同步读写,如何避免混乱的读写结果。一个基本的解决办法就是使用锁(LOCK)。 iOS提供多种同步锁的类和方法,这里介绍下基本用法。 1. NSLock:最基本的同步锁,使用lock来获得锁,unlock释放锁。如果其它线程已经使用lock,这时lock方法会阻塞当前线程,直到其它线程调用unlock释放锁为止。NSLock锁一般用于简转载 2014-08-18 16:28:28 · 5142 阅读 · 0 评论 -
iOS多线程的初步研究(七)-- dispatch对象
谈起iOS的dispatch(正式称谓是Grand Central Dispatch或GCD),不得不说这又是iOS(包括MacOSX)平台的创新,优缺点这里不讨论,只有当你使用时才能真正体会到。我们说dispatch函数的主要目的是实现多任务并发代码,那么要理解dispatch函数,先来了解dispatch对象的定义。 dispatch对象类型的部分定义,主要使用C语言的宏定义:转载 2014-08-18 18:09:13 · 653 阅读 · 0 评论 -
iOS多线程的初步研究(十)-- dispatch同步
GCD提供两种方式支持dispatch队列同步,即dispatch组和信号量。 一、dispatch组(dispatch group) 1. 创建dispatch组 dispatch_group_t group = dispatch_group_create(); 2. 启动dispatch队列中的block关联到group中 dispatch_group_asyn转载 2014-08-18 18:17:36 · 689 阅读 · 0 评论 -
iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
可以有两个办法让NSURLConnection在子线程中运行,即将NSURLConnection加入到run loop或者NSOperationQueue中去运行。 前面提到可以将NSTimer手动加入NSRunLoop,Cocoa库也为其它一些类提供了可以手动加入NSRunLoop的方法,这些类有NSPort、NSStream、NSURLConnection、NSNetServices,方转载 2014-08-18 18:06:04 · 3786 阅读 · 0 评论 -
iOS多线程的初步研究(六)-- NSOperation
iOS平台提供更高级的并发(异步)调用接口,让你可以集中精力去设计需完成的任务代码,避免去写与程序逻辑无关的线程生成、运行等管理代码。当然实质上是这些接口隐含生成线程和管理线程的运行,从而更加简洁地实现多线程。下面先来研究NSOperation和NSOperationQueue类的使用。 NSOperation实质是封装了需要并发运行的代码,一些主要接口和NSThread基本相同,可以看做没转载 2014-08-18 18:04:50 · 3888 阅读 · 0 评论 -
iOS多线程的初步研究(八)-- dispatch队列
GCD编程的核心就是dispatch队列,dispatch block的执行最终都会放进某个队列中去进行,它类似NSOperationQueue但更复杂也更强大,并且可以嵌套使用。所以说,结合block实现的GCD,把函数闭包(Closure)的特性发挥得淋漓尽致。 dispatch队列的生成可以有这几种方式: 1. dispatch_queue_t queue = disp转载 2014-08-18 18:12:59 · 670 阅读 · 0 评论 -
iOS多线程的初步研究(四)-- NSTimer
理解run loop后,才能彻底理解NSTimer的实现原理,也就是说NSTimer实际上依赖run loop实现的。 先看看NSTimer的两个常用方法: + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userI转载 2014-08-18 17:58:19 · 717 阅读 · 0 评论