这是pthread C ++程序的非可移植错误

时间:2012-01-21 16:45:52

标签: c++ c linux pthreads

我正在为pthread C ++程序编写代码。

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

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

我无法通过在线帖子找到解决方案。

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

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

感谢

3 个答案:

答案 0 :(得分:3)

就像马丁所说,在许多系统上,你可以只使用线程的pthread_t作为唯一标识符。您可以使用pthread_self(3)(POSIX)检索此项。您可以使用函数pthread_equal(3)来测试两个pthread_t的等价性。

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)pthread_getunique_np()返回的值都是相同的。实际上,您需要 pthread_t来获取唯一的整数。

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

(来自IBMpthread_getunique_np()的信息)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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