【问题标题】:Thread specific data confusion in the given example给定示例中的线程特定数据混淆
【发布时间】:2015-10-28 11:38:33
【问题描述】:

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

看完这篇,我有个问题,

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

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

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

我在网上找到了很多解释,但不知何故我的大脑不理解。请帮我理解。

【问题讨论】:

  • 如果你能告诉我拒绝投票的原因,你会很好。也许我可以教育自己以更好的方式在功能中发布它。
  • 我不知道是谁给了你投反对票,但如果你不显示一些有效的代码,你将继续投反对票。请展示一些工作,不要发布一些与在互联网上某处找到的代码相关的问题。任何理解事物的方法你都应该自己尝试something
  • 感谢 Michi 的提示,我从来不知道并且会遵循的。

标签: c multithreading pthreads posix


【解决方案1】:

如果我没有正确理解这个问题,你只是没有意识到线程特定数据的意图。

是的,您可以在不使用pthread_key 机制的情况下实现此示例。相反,您可以通过参数将文件描述符传递给函数write_to_thread_log

void write_to_thread_log (FILE* thread_log, const char* message)

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

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

但是在多线程程序的情况下,线程共享全局变量的值,所以这种方法不适合线程特定的数据。

pthread_key 机制解决了这个问题:虽然每个线程都看到相同的全局键值,但该键对应的数据是线程特定的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多