pthread_self()总是如何成功?

时间:2017-05-04 09:31:57

标签: c pthreads

当我学习pthread时,手册说pthread_self()总是成功。

  

错误

     

此功能始终成功。

这是怎么发生的?我们如何确定一个函数是否总能成功?

我试图从代码中找到答案,我遇到了以下代码:

# define THREAD_SELF \
  ({ struct pthread *__self;                                      \
     asm ("movl %%gs:%c1,%0" : "=r" (__self)                      \
      : "i" (offsetof (struct pthread, header.self)));            \
     __self;})

我在header.self中没有看到字段struct pthread,我是否查看了错误的定义? %c1是什么意思?输入i未使用吗?

1 个答案:

答案 0 :(得分:1)

pthread_self()返回当前运行的线程的标识符。它必须由"当前运行的线程"来调用,以便标识符必须存在。

怎么会失败?这与我们都假设x++;y = x / z等表达式无法失败的方式相同。