【问题标题】:On platforms where pthread_t is numeric, is 0 guaranteed to be an invalid value? [duplicate]在 pthread_t 为数字的平台上,0 是否保证为无效值? [复制]
【发布时间】:2013-08-23 18:37:23
【问题描述】:

pthread_t(由pthread_self() 返回)是不透明类型,但在某些平台上实际上是数字,例如typedefed 到unsigned long。在这些平台上,0 是无效的 pthread_t 值吗? -1呢?

【问题讨论】:

  • 我认为这不是重复的,因为我问的是特定于平台的行为而不是一般情况。

标签: c++ pthreads


【解决方案1】:

如果我想要一个 pthread_t 或无效的值,我会使用 C++1y 中的 boost::optional<pthread_t>std::optional<pthread_t>

这几乎没有开销(字节),表达了我想要的(这个值可能是也可能不是pthread_t),并且不依赖于特定于平台的行为。

【讨论】:

  • 嗯,是的,使用optional 或标志可能是最好的通用选项。但我特别将pthread_t 的使用限制在它是数字的平台上,正是因为它允许我在没有任何开销的情况下使用它(我将它放入std::atomic)。
  • 我没想到倒过来! (好技巧!)不幸的是,我需要将 optional 放在 atomic 中(我正在构建一个以线程 ID 作为键的无锁哈希表,我需要知道表中的给定插槽是否是免费或不完全基于其价值,并一次全部交换)。我想如果 sizeof(optional<pthread_t>) 是 64 位,我可以使用双宽 CAS 操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 2019-06-03
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
相关资源
最近更新 更多