我在弄清楚pthread_key_t和pthread_key_create的工作方式时遇到了一些麻烦。据我了解,每个线程都有TLS(线程本地存储),并且有一个 key 用于访问线程本地存储。我没有得到的是创建 key 时,每个线程都可以使用它吗?假设线程0创建了 key 0,线程1可以使用 key 0吗?如果线程1使用 key 0,它将访问自己的TLS还是线程0的TLS?

是否有一些全局数组或某种可以跟踪所有正在使用的键的东西?

最佳答案

pthread_keys就是您所说的,由公用 key 引用的线程本地存储。因此,多个线程使用相同的 key ,但获得不同的存储空间(每个线程)。

一个简单的例子(也有人为),说您正在构建一个异步服务器(如IMAP)。您可以跟踪数组中的客户端连接,每个客户端连接都有一个用于当前任务/请求的 key 。因此,当一个请求进入时,一个新线程被启动,并且该线程在Client_Connection-> WhatAmIDoing键中存储一个指向“请求”结构的指针。线程现在不必传递该指针,因为线程执行的任何函数都可以简单地调用pthread_getspecific()函数并获取指向其应做的事情的指针。

关于pthreads - pthread_key_t和方法pthread_key_create如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9005955/

10-15 06:38