如何在iOS中进行强大的线程本地存储

Hen*_*olm 7 c cocoa-touch pthreads thread-local-storage ios

pthread_getspecific在一个设计用于链接到各种iOS应用程序的库中显然出现错误结果时遇到了一些问题.

我看到Apple写道:

Cocoa和POSIX以不同的方式存储线程字典,因此您无法混合和匹配对这两种技术的调用.但是,只要您在线程代码中坚持使用一种技术,最终结果应该是相似的.在Cocoa中,您使用NSThread对象的threadDictionary方法来检索NSMutableDictionary对象,您可以向该对象添加线程所需的任何键.在POSIX中,您使用pthread_setspecific和pthread_getspecific函数来设置和获取线程的键和值.

这是否意味着,无论可可也不POSIX TLS功能可以预计在库代码工作的时候,我们不知道,我们调用的代码是否已经使用一个或其他?

在这些情况下,如何稳健地存储和检索线程局部指针?

是否有我们应该使用的本机Darwin TLS支持API而不是Cocoa或POSIX?

Rob*_*ier 7

我相信Apple的文档正在制作的一点是,你不能pthread_setspecific用来设置一个值,然后期望它可用threadDictionary.我不希望他们直接相互干涉; 它们只是分开的.

也就是说,如果这是特定于iOS的代码,那么管理它的强烈首选方法是使用GCD而不是POSIX线程.GCD提供TLS的形式等同dispatch_get_specific,dispatch_queue_get_specificdispatch_queue_set_specific.但它也提供了比POSIX线程更好的线程管理.