您好我正在阅读this link以了解特定于线程的数据。
读完这篇文章后,我得到了一个问题,
给定的示例创建了5个线程。
- 的函数
每个线程都运行thread_function,它有自己的堆栈。并且每个函数都调用另一个名为write_to_thread_log
- 醇>
现在,write_to_thread_log函数也将在每个特定线程的上下文中运行,在这种情况下,为什么我们需要特定于线程的数据。
我在网上发现了很多解释,但不知怎的,我的大脑并不理解。请帮我理解。
答案 0 :(得分:0)
如果我正确地解决了这个问题,你就不会意识到特定于线程的数据。
是的,您可以在不使用write_to_thread_log
机制的情况下实现此示例。相反,您可以通过参数:
void write_to_thread_log (FILE* thread_log, const char* message)
pthread_key
但是你应该把这个参数传递给每个函数,它可能会调用(甚至间接!)这个函数。由于日志记录通常涵盖几乎整个程序,因此您最终会在程序中的每个函数中添加其他参数,这是不方便的。
单线程程序可以使用全局变量来存储值,这些变量可以在很多地方使用。因为所有函数都可以使用全局变量,所以不需要将额外的参数传递给它们。
但是对于多线程程序,线程共享全局变量的值,因此这种方法不适用于特定于线程的数据。
{{1}}机制解决了这个问题:当每个线程都看到全局键的相同值时,与此键对应的数据是特定于线程的。