当我学习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
未使用吗?
答案 0 :(得分:1)
pthread_self()
返回当前运行的线程的标识符。它必须由"当前运行的线程"来调用,以便标识符必须存在。
怎么会失败?这与我们都假设x++;
或y = x / z
等表达式无法失败的方式相同。