c++ - pthread_key_t 与局部变量

标签 c++ c multithreading pthreads

我正在使用 Pthread 在 C++ 中开发一个多线程程序,我需要在每个线程中分配本地内存。谷歌搜索后,我发现 pthread_key_t 类型是某种映射,允许您在 TLS 中分配内存。

所以我的问题是线程函数中的局部变量和pthread_key_t有什么区别?你能给出一个 pthread_key_t 的正确用法示例吗?

最佳答案

线程局部存储和局部变量之间的区别在于线程局部存储不需要是函数的局部变量。一旦声明它们的函数返回,常规局部变量可能不再被访问。使用 pthread_getspecificpthread_setspecific 访问的线程特定存储可以在创建它的函数退出后安全使用。

您可以将线程局部变量视为线程特定的全局 变量,在同一线程中运行的函数之间共享。它们通常用于制作大量使用全局变量的多线程安全遗留代码。与所有全局变量一样,它们应该谨慎使用——如果你可以只使用局部变量就可以逃脱,一定要这样做。如果您确实需要线程内的全局变量,请使用线程本地存储。

关于c++ - pthread_key_t 与局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21624847/

相关文章:

c++ - 为什么 C++ 从推断的返回类型中剥离引用限定符,为什么生命周期扩展不起作用?

c++ - 如何在 Map 中存储集合容器的迭代器列表

c - 如何将命令行中的参数读入 double ?

java - EventQueue.invokeLater 与 start() 线程相比有何作用?

c++ - 使用互斥锁和手动锁定互斥锁的区别

c++ - 错误 : No matching function for call to class object

c++ - 将链接列表从 C 转换为 C++

c - C 中的数字序列移位?

c - 密码恢复程序

c++ - 为什么所有内核上的 sin(Vector) 可以和一个内核上的 sin(V) 一样快?