【发布时间】:2011-12-11 01:02:15
【问题描述】:
我看到一段这样的代码,想知道这是否是线程安全的:
int savedErrno = errno;
//call some function that may modifies errno
if (errno == xxx)
foo();
errno = savedErrno;
我认为这不是线程安全的,对吗?
但我看到有人写这样的代码,所以我不确定......
谁能帮我澄清一下,谢谢...
【问题讨论】:
-
你在哪里看到不安全的部分 kai ?
-
@littleadv 它看起来不是线程安全的原因是因为它看起来像 errno 是一个全局变量,因此被所有线程共享。我认为最初是这种情况,直到聪明的系统实现者通过用一些宏魔术替换全局变量来“修复它”,使 errno 成为每个线程的局部变量。尽管 IMO 仍然是一个丑陋的机制......
标签: c++ c linux thread-safety errno