/***********************
* while(1) sleep(INFINITE);
***********************/
출처 https://kldp.org/node/36904
'개발자노트' 카테고리의 다른 글
[PHP + Laravel] 라라벨 인스톨러 설치 시 Composer\Exception\NoSslException 에러 해결법 (0) | 2016.08.27 |
---|---|
Mysql 비밀번호 분실 시 조치(for Windows) (0) | 2016.08.20 |
Django Error NoReverseMatch Reverse for '???' with arguments '()' and keyword arguments '{}' not found. (0) | 2016.07.23 |
Django Error ValueError Don't mix *args and **kwargs in call to reverse()! 해결법 (0) | 2016.07.23 |
Git 처음 세팅(초기화) (0) | 2016.07.09 |
thread safe란 것은 여러 thread가 동시에 사용되어도
안전하단 말입니다.
보통 재진입 가능하게 만들어진 함수일 경우는 스레드 세이프이고,
전역 변수를 사용하지 않게끔 구성하게 되죠...
예를 들어
라는 코드가 있다고 합시다.
만약 한개의 thread만이 동작하고 있다면 아무 문제 없이 동작하게 됩니다만!!
여러개가 사용한다고 했을때는 문제가 달라지게 되죠.
A라는 쓰레드가 1번라인을 수항하고 있는와중에 schedule되어서 B쓰레드가 다시 이 함수를 콜하게 되면...
엉뚱한 값을 리턴하게 됩니다.
해결방법으론 전역변수를 최대한 제거를 하고,
불가능 하다면 mutex를 사용하여야 겠지요...
pthread를 예로 들면
이런식으로 하면 되겠죠...
standard library에 있는 몇몇 함수중에 thread safe하지 않은것이 있는데...
대표적인 예로 gmtime이 있죠...
gmtime은 내부적으로 static으로 선언된 변수의 포인터를 리턴하게 되는데,
위에서 지적한 전역변수를 사용하기 때문에 thread safe하지 못하게 됩니다.
gmtime대신 gmtime_r을 사용하면 해결 됩니다...