는이 같은 코드의 조각을보고이 스레드 안전한지 궁금 : 내가 해결하고,이 코드는 스레드로부터 안전하지 않습니까?
int savedErrno = errno;
//call some function that may modifies errno
if (errno == xxx)
foo();
errno = savedErrno;
내가이 스레드 안전하다고 생각하지 않는다?
는하지만 사람들이 이런 식으로 코드를 작성했다, 그래서 나는
왜 안전하지 않습니까? – littleadv
안전하지 않은 부분은 어디에서 보입니까? – ScarletAmaranth
@littleadv 스레드로부터 안전하지 않은 이유는 errno가 전역 변수이므로 모든 스레드가 공유하기 때문입니다. 영리한 시스템 구현자가 전역 변수를 매크로 매직 (macro-magic)으로 대체하여 스레드 별 로컬 변수마다 errno를 만들 때까지 원래의 경우라고 생각합니다. IMO는 여전히 추악한 메커니즘입니다 ... –