【问题标题】:Is this a non portable error of a pthread C++ program这是 pthread C++ 程序的不可移植错误吗
【发布时间】:2012-01-21 16:45:52
【问题描述】:

我正在编写一个 pthread C++ 程序。

我得到了错误: “pthread_getunique_np”未在此范围内声明

pthread_getunique_np 或其他带有“*np”的文件不可移植。

我无法从网上的帖子中找到解决方案。

我知道 _np 意味着它不是 POSIX 标准。

如何解决这个问题?我需要包含一些头文件或其他替代品吗?

谢谢

【问题讨论】:

  • 使用不同的功能...?审视您更广泛的目标并找到不同的解决方案。

标签: c++ c linux pthreads


【解决方案1】:

正如 Martin 所说,在许多系统上,您可以只使用线程的 pthread_t 作为唯一标识符。您可以使用pthread_self(3) 检索它,它是 POSIX。您可以使用函数pthread_equal(3) 来测试两个pthread_ts 是否相等。

pthread_t threadID = pthread_self();
if (pthread_equal(threadID, someOtherID) != 0)
    /* Branch based on being the same thread */
else
    /* Branch based on being different threads */

据我所知,pthread_getunique_np() 返回一个唯一的整数 ID,这与使用 pthread_t 作为标识符不同。在许多系统上,pthread_self(3) 和 f pthread_getunique_np() 返回的值是相同的。事实上,您需要 pthread_t 来获取唯一整数。

无论哪种方式,pthread_self(3) 都需要返回调用它的线程的 ID,所以我相信你应该能够以你想要的方式使用这个可移植函数。

(来自IBM的关于pthread_getunique_np()的信息)

【讨论】:

    【解决方案2】:

    _np 后缀表示“非便携”。换句话说,它不是 POSIX 标准的一部分,因此不能保证在 POSIX 系统上可用。

    【讨论】:

    • 谢谢,我知道。我需要知道如何绕过它。
    【解决方案3】:

    只需使用pthread_t 作为唯一标识符。无论如何,我很可能与pthread_getunique_np 的返回值相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      相关资源
      最近更新 更多