【问题标题】:pthread_t is in android and linuxpthread_t 在 android 和 linux 中
【发布时间】:2012-03-13 11:48:16
【问题描述】:

我是安卓新手。在android中检查的pthread_t被定义为typedef long int pthread_t,我不确定它在Linux中是如何定义的。如果它被定义为原生数据类型,并且它与 android 不同,他们为什么会有这种差异?

【问题讨论】:

  • typedef unsigned long int pthread_t;某些版本的 Red Hat,不确定是哪个版本。
  • 嗯,我不能在工作中检查,但我认为它可能是一样的。我刚刚检查了我碰巧登录的服务器。
  • 您的问题是“为什么 Android typedef 中缺少 unsigned 对吗?如果我理解正确?因为它在 Linux 中是 typedef unsigned long int pthread_t,在 Android 标头中是 typedef unsigned long int pthread_t

标签: android c linux pthreads android-source


【解决方案1】:

它在 bits/pthreadtypes.h 中定义为 unsigned long int - 它是线程描述符,但为什么它对你很重要?

【讨论】:

  • 我已将 windows 版本代码移植到 linux,其中我使用 typedef unsigned long int pthread_t;所以同样的can代码可以用于windows和linux。现在我想移植到 android,想使用相同的 typedef,但显示错误!。
  • 你自己typedefing?您应该使用标题,并且可能为 Windows 创建自己的标题。
  • 在 windows 版本代码中,凡使用 threadid 的地方都定义为 unsigned long int,所以我没有使用两组代码,而是为 linux 键入了 unsigned long int。
  • 我几乎可以肯定它依赖于实现,所以你不能依赖它在库更新之间保持不变。理论上,它也可以是一个指针。我更愿意将我自己的类型定义为 pthread_t 或目标操作系统提供的任何其他类型,在操作系统识别的#ifdef 中。
【解决方案2】:

不同的平台可能会有不同的需求,而且不同的实现原生类型也不同,所以使用 typedef 是有意义的。

例如,long 在 64 位 Windows 上是 32 位,但在 64 位 Linux 上是 64 位。

【讨论】:

    猜你喜欢
    • 2018-05-28
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 2011-01-12
    • 2021-11-30
    相关资源
    最近更新 更多