美文网首页
AutoreleasePool查漏补缺

AutoreleasePool查漏补缺

作者: Scott丶Wang | 来源:发表于2018-03-14 10:10 被阅读11次

想必大家都对自动释放池实现原理都有了大致的了解了吧,这篇文章不再对实现细节做过多的讲解,只记录大家不太了解的东西。

TLS

多个线程共享数据

众所周知,在多线程编程中, 同一个变量, 如果要让多个线程共享访问, 那么这个变量可以使用关键字volatile进行声明;

单一线程局部存储

那么如果一个变量不想使多个线程共享访问, 那么该怎么办呢? 这个办法就是TLS, 线程局部存储. 它的使用非常简单, 下面我来举一个例子.
Thread Local Storage(TLS)线程局部存储,目的很简单,将一块内存作为某个线程专有的存储,以key-value的形式进行读写,比如在非arm架构下,使用pthread提供的方法实现:

void* pthread_getspecific(pthread_key_t);
int pthread_setspecific(pthread_key_t , const void *);
#import <pthread/pthread.h>

void (*worker1)(void *arg);
void (*worker2)(void *arg);

- (void)viewDidLoad {
    [super viewDidLoad];
    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(pthreadGetSpecific) object:nil];
    [thread start];
}

- (void)pthreadGetSpecific {
    pthread_key_t key;
    pthread_key_create(&key, worker1);
    
    NSString *str = @"wwh";
    pthread_setspecific(key, CFBridgingRetain([NSString stringWithFormat:@"%@_wwh", str]));
    NSLog(@"str = %@", pthread_getspecific(key));    
    NSLog(@"str_org = %@", str);
}

相关文章

  • AutoreleasePool查漏补缺

    想必大家都对自动释放池实现原理都有了大致的了解了吧,这篇文章不再对实现细节做过多的讲解,只记录大家不太了解的东西。...

  • 【Android面试查漏补缺】之事件分发机制详解

    前言 查漏补缺,查漏补缺,你不知道哪里漏了,怎么补缺呢?本文属于【Android面试查漏补缺】系列文章第一篇,持续...

  • 总结下最近的iOS面试题[1]

    自己能经常看看也是好的,查漏补缺以下面试题只是简洁的回答,具体解析会有链接 一、AutoReleasePool,A...

  • 查漏补缺

    如果想让HTML5标签兼容低版本浏览器的话,可以使用 html5shiv js来实现。注意:一定要把它引入到前面。...

  • 查漏补缺

    图文环绕和浮动 最初的CSS只是用来写文章,熟练使用float和clear两个属性来布局: float属性:指定一...

  • 查漏补缺

    1.js字符串转换成数字与数字转换成字符串的实现方法https://www.2cto.com/kf/201612/...

  • 查漏补缺

    浮动原理 1.使用之初:是为了让文字环绕图片,并且不会遮住文字。如果让图片与文字有间距,我们在浮动元素上添加。2....

  • 查漏补缺

    今天数学老师外出学习,我用了一上午的时间给孩子们查漏补缺。 首先,训练朗读:从段落与段落之间的大停顿...

  • 查漏补缺

    1 Python提供了ord()和chr()函数,可以把字母和对应的数字相互转换2 写 u'中' 和 u'\u4e...

  • 查漏补缺

    generator(生成器) 什么是生成器:把一个列表推倒式l = [x for x in range(10)]改...

网友评论

      本文标题:AutoreleasePool查漏补缺

      本文链接:https://www.haomeiwen.com/subject/jmoktftx.html