我正在使用 Pthread 在 C++ 中开发一个多线程程序,我需要在每个线程中分配本地内存。谷歌搜索后,我发现 pthread_key_t 类型是某种映射,允许您在 TLS 中分配内存。
所以我的问题是线程函数中的局部变量和pthread_key_t有什么区别?你能给出一个 pthread_key_t 的正确用法示例吗?
最佳答案
线程局部存储和局部变量之间的区别在于线程局部存储不需要是函数的局部变量。一旦声明它们的函数返回,常规局部变量可能不再被访问。使用 pthread_getspecific
和 pthread_setspecific
访问的线程特定存储可以在创建它的函数退出后安全使用。
您可以将线程局部变量视为线程特定的全局 变量,在同一线程中运行的函数之间共享。它们通常用于制作大量使用全局变量的多线程安全遗留代码。与所有全局变量一样,它们应该谨慎使用——如果你可以只使用局部变量就可以逃脱,一定要这样做。如果您确实需要线程内的全局变量,请使用线程本地存储。
关于c++ - pthread_key_t 与局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21624847/