gpt4 book ai didi

multithreading - 在64位OSX上如何设置线程特定的数据预定义结构?

转载 作者:行者123 更新时间:2023-12-03 12:59:44 25 4
gpt4 key购买 nike

到目前为止,从我发现的内容来看,“gs”寄存器指向线程特定的数据区域(TSD)。可以使用pthread_key_create在此区域分配一个指针大小的内存,并使用pthread_setspecific将其写入。

在查看apple's tsd.h之后,似乎在TSD内存区域的开始处预定义了一些大小相同(指针大小)的条目,即__TSD_THREAD_SELF,__ TSD_ERRNO,__ TSD_MIG_REPLY和__TSD_SEMAPHORE_CACHE。

所以现在我的问题是:

  • 这些条目是否全部都是预定义的结构?
  • pthread_key_create在哪里为新条目保留内存? (旧版本使用_PTHREAD_TSD_OFFSET作为“gs”寄存器中地址的偏移量,但在新的OSX源中找不到它)
  • 初始化预定义结构的源代码在哪里?
  • 如果仍然存在_PTHREAD_TSD_OFFSET,并且仍然比__TSD_RESERVED_MAX * sizeof(pointer)大得多,那么它们之间的空间是什么?

  • (由于OSX二进制文件使用mach-o,因此dyld似乎也参与其中)

    最佳答案

    这在libpthread subcomponent中定义。特别是,请查看internal.h中的struct _pthreadtsd字段是gsbase指向的线程特定数据的数组。前_INTERNAL_POSIX_THREAD_KEYS_MAX(当前为256个)元素保留给Apple。剩余的_EXTERNAL_POSIX_THREAD_KEYS_MAX(当前在macOS上为512)元素用于pthread_key_create()的调用方。

    内部插槽保留用于各种系统库/框架和C库。一些保留记录在tsd_private.h中。

    关于multithreading - 在64位OSX上如何设置线程特定的数据预定义结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39685758/

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