我正在为pthread C ++程序编写代码。
我收到了错误: “pthread_getunique_np”未在此范围内声明
pthread_getunique_np或其他带有“* np”的内容不可移植。
我无法通过在线帖子找到解决方案。
我知道_np意味着它不是POSIX标准。
如何解决这个问题?我需要包含一些头文件或其他替代品吗?
感谢
答案 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,所以我相信你应该能够以你想要的方式使用这个便携式函数。
(来自IBM的pthread_getunique_np()
的信息)
答案 1 :(得分:0)
_np
后缀表示“非便携式”。换句话说,它不是POSIX标准的一部分,因此不能保证在POSIX系统上可用。
答案 2 :(得分:0)
只需使用pthread_t
作为唯一标识符即可。无论如何,我很可能与pthread_getunique_np
的返回值相同。