日期:2014-05-16  浏览次数:20677 次

APUE中12.6节内的代码12-5实现的getenv感觉没有达到线程安全啊,求指教~
作者用线程私有数据实现了“线程安全”的getenv函数,但我觉得如果有多个线程同时调用这个getenv()函数的时候,依然返回的是同一个缓冲区的内容,没有达到线程安全。

求解释~谢谢!

如果需要具体的问题描述和相应代码,可以在我的博客看:http://blog.csdn.net/sad_sugar/article/details/18412603

多谢大家指教!!!

------解决方案--------------------



引用:
作者用线程私有数据实现了“线程安全”的getenv函数,但我觉得如果有多个线程同时调用这个getenv()函数的时候,依然返回的是同一个缓冲区的内容,没有达到线程安全。

求解释~谢谢!

如果需要具体的问题描述和相应代码,可以在我的博客看:http://blog.csdn.net/sad_sugar/article/details/18412603

多谢大家指教!!!

线程私有存储的使用是整个进程对某个pthread_key_t做一次 pthread_key_create,每个线程调用pthread_getspecific的时候取到自己的私有存储空间,你可以想象成是该key是一个map,每个线程用自己的线程id获取对应的空间
------解决方案--------------------
引用:
Quote: 引用:




Quote: 引用:

作者用线程私有数据实现了“线程安全”的getenv函数,但我觉得如果有多个线程同时调用这个getenv()函数的时候,依然返回的是同一个缓冲区的内容,没有达到线程安全。

求解释~谢谢!

如果需要具体的问题描述和相应代码,可以在我的博客看:http://blog.csdn.net/sad_sugar/article/details/18412603

多谢大家指教!!!

线程私有存储的使用是整个进程对某个pthread_key_t做一次 pthread_key_create,每个线程调用pthread_getspecific的时候取到自己的私有存储空间,你可以想象成是该key是一个map,每个线程用自己的线程id获取对应的空间



void* pthread_getspecific(pthread_key_t key),这个函数的参数是生成的key,你的意思是,虽然整个进程只产生一个key,但每个线程通过同样的key得到的存储空间却是不同的,并不是说一个key对应一段空间,是这样理解吗?

是的