线程本地存储和iOS

时间:2011-07-02 15:05:35

标签: c++ ios templates pthreads thread-local-storage

我的理解是iOS不支持__thread。显然,有一种方法可以使用pthread_setspecific来完成此操作。但是,是否已经有一个已实现此功能的模板类?

我不得不重新发明轮子,特别是因为它不是一段简单的代码。

非常感谢任何链接!

干杯

1 个答案:

答案 0 :(得分:20)

基金会提供-[NSThread threadDictionary]。您可以使用它来存储线程本地的Objective-C对象,其中可能包含NSValue包装任何动态存储的地址。

请注意,Cocoa正在向线程代码的线程盲执行发展,您可以在其中提交要在任何可用的系统拥有的线程上运行的代码块。这是Grand Central Dispatch和共享NSOperationQueue使用的模型。依赖于线程本地存储的代码将无法充分利用此模型。有关详细信息,请参阅Apple的Concurrency Programming Guide

ETA:从iOS 5 / OS X 10.7开始,Grand Central Dispatch通过dispatch_queue_set_specificdispatch_queue_get_specific和{{获得了您称之为队列本地存储的功能1}}功能。除了为密钥设置新值或销毁队列时的值,setter还允许您提供析构函数。 getter sans队列使用当前队列作为上下文,如果当前队列中未定义键,则将在当前队列的目标队列上重复查找(类似于原型OO系统中属性查找的工作原理)。