gpt4 book ai didi

ios - 如何在 iOS 中进行健壮的线程本地存储

转载 作者:可可西里 更新时间:2023-11-01 03:30:06 25 4
gpt4 key购买 nike

我在设计用于链接到各种 iOS 应用程序的库中显然从 pthread_getspecific 得到错误结果时遇到了一些问题。

我看到了 Apple writes :

Cocoa and POSIX store the thread dictionary in different ways, so you cannot mix and match calls to the two technologies. As long as you stick with one technology inside your thread code, however, the end results should be similar. In Cocoa, you use the threadDictionary method of an NSThread object to retrieve an NSMutableDictionary object, to which you can add any keys required by your thread. In POSIX, you use the pthread_setspecific and pthread_getspecific functions to set and get the keys and values of your thread.

这是否意味着当我们不知道调用我们的代码是否已经在使用其中一个或另一个时,无论是 Cocoa 还是 POSIX TLS 函数都不能在库代码中运行?

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

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

最佳答案

我相信 Apple 文档的重点是您不能使用 pthread_setspecific 设置一个值,然后期望它在 threadDictionary 中可用。我不希望他们直接相互干扰;它们只是分开的。

也就是说,如果这是特定于 iOS 的代码,那么 the strongly preferred way使用 GCD 而不是 POSIX 线程来管理它。 GCD 以 dispatch_get_specificdispatch_queue_get_specificdispatch_queue_set_specific 的形式提供等效的 TLS。但它还提供了比 POSIX 线程更好的线程管理。

关于ios - 如何在 iOS 中进行健壮的线程本地存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18081686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com