9

我的理解是 iOS 不支持__thread. 显然,有一种方法可以使用pthread_setspecific. 但是,是否已经有一个模板类实现了这个功能?

我想重新发明轮子,尤其是因为它不会是一段简单的代码。

任何链接将不胜感激!

干杯

4

1 回答 1

20

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

请注意,Cocoa 正在朝着线程代码的线程盲执行方向发展,您可以在其中提交代码块以在任何可用的系统拥有的线程上运行。这是 Grand Central Dispatch 和 shared 使用的模型NSOperationQueue。依赖线程本地存储的代码不会充分利用此模型。有关详细信息,请参阅 Apple 的并发编程指南

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

于 2011-07-02T16:45:45.273 回答