3

我正在使用 POSIX 线程审查代码,并使用 POSIX 线程的较旧 LinuxThreads 实现在 Linux 平台上运行(交叉编译代码,如果有任何区别,则以 MIPS/uClibc 为目标)。如果 NPTL 实施的答案有任何不同,为了完整起见,我也想知道这一点。这个问题pthread_t与我可以从 C 库头文件中看到的类型有关,它被定义为unsigned long intuClibc 和 glibc (实际上是嵌入式 GNU C 库——我只有 Ubuntu 可供参考)。

对于这个问题......类型的变量pthread_t用于存储属性的所有者。困扰我的是,我看到0了标记没有线程拥有该属性的分配;这让我很困扰,因为我知道 POSIX 标准规定pthread_t 类型是不透明的,我们不应该对类型做出任何假设。我知道最好使用布尔标志来确定属性是否由线程拥有。我确实认为应该修复代码以从长远来看尊重 POSIX 标准(如果不是出于其他原因,那么是为了让后代免于思考代码的稳健性),但现在短期内我需要知道回答以下问题:我们可以假设永远不能设置的pthread_t0pthread_create(3) 在这个平台中(据我所知,我们应该得到一个值的唯一方法pthread_t),然后:赋值给 value是一种标记这个平台中0未使用的属性的可靠方法吗?

4

0 回答 0