【问题标题】:Saving data in Win32 TIB在 Win32 TIB 中保存数据
【发布时间】:2016-08-22 04:45:19
【问题描述】:

线程信息块应该广为人知,可用于访问一些重要信息。但是我可以用它来保存数据吗?

我已经看到该结构在偏移量 14h (x86) / 28h (x86-64) 处有一个任意指针的插槽。

我可以使用这个指针从我自己的调度程序中指向我自己的线程结构吗?还是被其他东西覆盖了?

【问题讨论】:

    标签: c windows winapi


    【解决方案1】:

    您可以使用TlsAlloc() 函数来分配线程本地存储。每个 TLS 索引都可以保存一个指针大小的值,因此如果需要,您可以使用 TLS 槽来指向更大的已分配数据结构。

    有关示例,请参阅 Using Thread Local Storage

    【讨论】:

    • 是的,我知道这个解决方案。这可能会产生问题,因为用户可以通过TlsFree()'ing 插槽来覆盖它。
    • 用户?你指的这个用户是谁?他们在您不知情的情况下在您的程序中编写代码?您必须让他们承诺不会释放您的 TLS 插槽。就像您需要让他们保证不写信给 TIB 一样。使用 TLS。 TIB 是私有的。
    • 微软的运行时使用 TLS,所以我不明白为什么你的不能。
    • 您可以分配一个 TLS 索引并使用它。一旦你分配了索引,在你决定释放它之前,没有其他人可以使用相同的索引。您正站在 Win32 之上。不妨利用这一点。
    • 是的,每个线程使用相同的索引。全局是你想要的,对于索引。按照答案中的链接进行操作。
    猜你喜欢
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 2013-11-07
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多