How does pthread_key_t and the method pthread_key_

2020-02-28 07:21发布

I am having some trouble figuring out how pthread_key_t and pthread_key_create work. From my understand, each thread has TLS (thread local storage) and that a key is used to access the thread local storage. What I do not get is when a key is created, does every thread get to use it? Lets say Thread 0 creates key 0, can Thread 1 then use key 0? If Thread 1 used key 0, would it access its own TLS or Thread 0's TLS?

Is there some global array or something that keeps track of all the keys being used?

1条回答
Summer. ? 凉城
2楼-- · 2020-02-28 07:57

pthread_keys are just what you said, thread local storage referred to by a common key. So multiple threads use the same key, but get different storage space (per thread).

A quick example (contrived too), say you were building an asynchronous server (like IMAP). You could keep track of client connections in an array, with each having a key for the current task/request. So when a request comes in a new thread is spun up and the thread stores in the Client_Connection->WhatAmIDoing key a pointer to the "request" structure. The thread now wouldn't have to pass around that pointer because any function that thread executes could simply call the pthread_getspecific() function and get the pointer to what it's supposed to be doing.

查看更多
登录 后发表回答