给定示例

时间:2015-10-28 11:38:34

标签: c multithreading pthreads posix

您好我正在阅读this link以了解特定于线程的数据。

读完这篇文章后,我得到了一个问题,

  
      
  1. 给定的示例创建了5个线程。

  2.   
  3. 每个线程都运行thread_function,它有自己的堆栈。并且每个函数都调用另一个名为write_to_thread_log

  4. 的函数   
  5. 现在,write_to_thread_log函数也将在每个特定线程的上下文中运行,在这种情况下,为什么我们需要特定于线程的数据。

  6.   

我在网上发现了很多解释,但不知怎的,我的大脑并不理解。请帮我理解。

1 个答案:

答案 0 :(得分:0)

如果我正确地解决了这个问题,你就不会意识到特定于线程的数据。

是的,您可以在不使用write_to_thread_log机制的情况下实现此示例。相反,您可以通过参数:

将文件描述符传递给函数void write_to_thread_log (FILE* thread_log, const char* message)
pthread_key

但是你应该把这个参数传递给每个函数,它可能会调用(甚至间接!)这个函数。由于日志记录通常涵盖几乎整个程序,因此您最终会在程序中的每个函数中添加其他参数,这是不方便的。

单线程程序可以使用全局变量来存储值,这些变量可以在很多地方使用。因为所有函数都可以使用全局变量,所以不需要将额外的参数传递给它们。

但是对于多线程程序,线程共享全局变量的值,因此这种方法不适用于特定于线程的数据。

{{1}}机制解决了这个问题:当每个线程都看到全局键的相同值时,与此键对应的数据是特定于线程的。