我正在使用 POSIX 线程审查代码,并使用 POSIX 线程的较旧 LinuxThreads 实现在 Linux 平台上运行(交叉编译代码,如果有任何区别,则以 MIPS/uClibc 为目标)。如果 NPTL 实施的答案有任何不同,为了完整起见,我也想知道这一点。这个问题pthread_t
与我可以从 C 库头文件中看到的类型有关,它被定义为unsigned long int
uClibc 和 glibc (实际上是嵌入式 GNU C 库——我只有 Ubuntu 可供参考)。
对于这个问题......类型的变量pthread_t
用于存储属性的所有者。困扰我的是,我看到0
了标记没有线程拥有该属性的分配;这让我很困扰,因为我知道 POSIX 标准规定pthread_t
类型是不透明的,我们不应该对类型做出任何假设。我知道最好使用布尔标志来确定属性是否由线程拥有。我确实认为应该修复代码以从长远来看尊重 POSIX 标准(如果不是出于其他原因,那么是为了让后代免于思考代码的稳健性),但现在短期内我需要知道回答以下问题:我们可以假设永远不能设置的pthread_t
值0
pthread_create(3)
在这个平台中(据我所知,我们应该得到一个值的唯一方法pthread_t
),然后:赋值给 value是一种标记这个平台中0
未使用的属性的可靠方法吗?