我在弄清楚pthread_key_t和pthread_key_create如何工作时遇到了一些麻烦。据我所知,每个线程都有TLS(线程本地存储),并且一个密钥用于访问线程本地存储。我没有得到的是当创建一个密钥时,每个线程都可以使用它吗?让我们说线程0创建密钥0,线程1可以使用密钥0吗?如果线程1使用密钥0,它是否会访问自己的TLS或线程0的TLS?
是否有一些全局数组或某些东西可以跟踪所使用的所有密钥?
答案 0 :(得分:5)
pthread_keys就是您所说的,通过公共密钥引用的线程本地存储。因此,多个线程使用相同的密钥,但获得不同的存储空间(每个线程)。
一个简单的例子(也是设计的),假设您正在构建一个异步服务器(如IMAP)。您可以跟踪阵列中的客户端连接,每个客户端都具有当前任务/请求的密钥。因此,当一个请求进入时,新的线程被旋转,并且该线程在Client_Connection-> WhatAmIDoing键中存储指向“请求”结构的指针。线程现在不必传递该指针,因为线程执行的任何函数都可以简单地调用pthread_getspecific()函数并获取指向它应该执行的操作的指针。