我正在使用Pthread在C ++中开发一个多线程程序,我需要在每个线程中分配本地内存。在谷歌搜索后,我发现了pthread_key_t类型,这是一种允许您在TLS中分配内存的地图。
所以我的问题是线程函数中的局部变量和pthread_key_t之间有什么区别?你能给出pthread_key_t的正确用法示例吗?
答案 0 :(得分:2)
线程局部存储和局部变量之间的区别在于线程局部存储不需要是函数的本地存储。只要声明它们的函数返回,就不再能够访问常规局部变量。使用pthread_getspecific
和pthread_setspecific
访问的特定于线程的存储可以在创建它的函数退出后安全使用。
您可以将线程局部变量视为特定于线程的全局变量,在同一线程中运行的函数之间共享。它们通常用于制作遗留代码,这些代码大量使用全局变量多线程安全。与所有全局变量一样,应谨慎使用它们 - 如果您只能使用局部变量,那么一定要这样做。如果确实需要线程中的全局变量,请使用线程本地存储。
答案 1 :(得分:1)
由于每个线程都有自己的堆栈,因此每个线程分配自己的变量要好得多,除非您需要在线程之间共享数据。 pthread_key_ *用于数据共享。
http://pubs.opengroup.org/onlinepubs/007904975/functions/pthread_key_create.html上的文档和小例子。