想必大家都对自动释放池实现原理都有了大致的了解了吧,这篇文章不再对实现细节做过多的讲解,只记录大家不太了解的东西。
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);
}