쓰레드에서 사용해도 안전하다. 라는 의미인데요.
멀티 프로세스나 멀티 쓰레드의 동기화에 대해 알고 계신다면,
클리티컬 섹션에 대한 동시 접근을 하지 않도록 하는 뮤텍스를 알고 계실텐데요.
멀티 쓰레드 환경에서 뮤텍스를 사용자가 생각하지 않고 그냥 사용해도 안전하다 라는 뜻입니다.
만약 어떤 함수가 기존의 global variable이나 그 함수 자체의 static variable등의 값을 참고해서 움직이게 되면 thread safe 하지 않은 결과가 나오겠죠.
그러니깐 그냥 원래의 의도는
한번 부를때마다 1씩 더해서 출력하고 싶어서
void counter() { static int c=0; printf("%d\n",c++); }
이렇게 해 줬는데
thread A랑 thread B에서 동시에 사용한다면 둘 다 원하는 결과를 얻지 못하거나 하는 그런 거죠.. 잘 생각해 보시면 strtok 같은 함수들이 별로 thread-safe하지 않은 구조라는 것을 느끼실 수 있습니다. (실제로 thread-safe하지 않은지는 잘 모르겠습니다만; )
쓰레드에서 사용해도 안전하다. 라는 의미인데요.
멀티 프로세스나 멀티 쓰레드의 동기화에 대해 알고 계신다면,
클리티컬 섹션에 대한 동시 접근을 하지 않도록 하는 뮤텍스를 알고 계실텐데요.
멀티 쓰레드 환경에서 뮤텍스를 사용자가 생각하지 않고 그냥 사용해도 안전하다 라는 뜻입니다.
쓰레드에서 사용해도 안전하다. 라는 의미인데요.
멀티 프로세스나 멀티 쓰레드의 동기화에 대해 알고 계신다면,
클리티컬 섹션에 대한 동시 접근을 하지 않도록 하는 뮤텍스를 알고 계실텐데요.
멀티 쓰레드 환경에서 뮤텍스를 사용자가 생각하지 않고 그냥 사용해도 안전하다 라는 뜻입니다.
strtok의 경우 Multi-thread환경에서는 사용하면 안되는데,
동기화를 하든 안하든 여러곳에서 호출하면 안되는 함수로 알고 있습니다.
이것도 thread-safe하지 않다고 말 할 수 있는걸까요 -_-a?
약간은 말장난같기도 하지만 궁금하군요.
사실은 쓰다가 저도 좀 이상해서(제가 잘못 알고 있는 것 같아서) 안 올릴려고 했는데 이상하게 글이 올라가 있네요 ㅋ;;
아까 글 등록시키는 중에 등록 안 되고 멈춰있길래, 이상한거 같기도 해서 x 누르고 빠져나왔었는데 -_-; 등록 안된 것 처럼 보였는데 등록이 되어 있었군요;
헐헐;; 왠지 모를 민망함;; ㅋ
thread safe란 것은 여러 thread가 동시에 사용되어도안전
thread safe란 것은 여러 thread가 동시에 사용되어도
안전하단 말입니다.
보통 재진입 가능하게 만들어진 함수일 경우는 스레드 세이프이고,
전역 변수를 사용하지 않게끔 구성하게 되죠...
예를 들어
라는 코드가 있다고 합시다.
만약 한개의 thread만이 동작하고 있다면 아무 문제 없이 동작하게 됩니다만!!
여러개가 사용한다고 했을때는 문제가 달라지게 되죠.
A라는 쓰레드가 1번라인을 수항하고 있는와중에 schedule되어서 B쓰레드가 다시 이 함수를 콜하게 되면...
엉뚱한 값을 리턴하게 됩니다.
해결방법으론 전역변수를 최대한 제거를 하고,
불가능 하다면 mutex를 사용하여야 겠지요...
pthread를 예로 들면
이런식으로 하면 되겠죠...
standard library에 있는 몇몇 함수중에 thread safe하지 않은것이 있는데...
대표적인 예로 gmtime이 있죠...
gmtime은 내부적으로 static으로 선언된 변수의 포인터를 리턴하게 되는데,
위에서 지적한 전역변수를 사용하기 때문에 thread safe하지 못하게 됩니다.
gmtime대신 gmtime_r을 사용하면 해결 됩니다...
/***********************
* while(1) sleep(INFINITE);
***********************/
쓰레드 안정성.쓰레드에서 사용해도 안전하다. 라는 의미인데요.
쓰레드 안정성.
쓰레드에서 사용해도 안전하다. 라는 의미인데요.
멀티 프로세스나 멀티 쓰레드의 동기화에 대해 알고 계신다면,
클리티컬 섹션에 대한 동시 접근을 하지 않도록 하는 뮤텍스를 알고 계실텐데요.
멀티 쓰레드 환경에서 뮤텍스를 사용자가 생각하지 않고 그냥 사용해도 안전하다 라는 뜻입니다.
만약 어떤 함수가 기존의 global variable이나 그 함수 자체의
만약 어떤 함수가 기존의 global variable이나 그 함수 자체의 static variable등의 값을 참고해서 움직이게 되면 thread safe 하지 않은 결과가 나오겠죠.
그러니깐 그냥 원래의 의도는
한번 부를때마다 1씩 더해서 출력하고 싶어서
void counter() { static int c=0; printf("%d\n",c++); }
이렇게 해 줬는데
thread A랑 thread B에서 동시에 사용한다면 둘 다 원하는 결과를 얻지 못하거나 하는 그런 거죠.. 잘 생각해 보시면 strtok 같은 함수들이 별로 thread-safe하지 않은 구조라는 것을 느끼실 수 있습니다. (실제로 thread-safe하지 않은지는 잘 모르겠습니다만; )
http://home.postech.ac.kr/~sodomau
쓰레드 안정성.쓰레드에서 사용해도 안전하다. 라는 의미인데요.
쓰레드 안정성.
쓰레드에서 사용해도 안전하다. 라는 의미인데요.
멀티 프로세스나 멀티 쓰레드의 동기화에 대해 알고 계신다면,
클리티컬 섹션에 대한 동시 접근을 하지 않도록 하는 뮤텍스를 알고 계실텐데요.
멀티 쓰레드 환경에서 뮤텍스를 사용자가 생각하지 않고 그냥 사용해도 안전하다 라는 뜻입니다.
쓰레드 안정성.쓰레드에서 사용해도 안전하다. 라는 의미인데요.
쓰레드 안정성.
쓰레드에서 사용해도 안전하다. 라는 의미인데요.
멀티 프로세스나 멀티 쓰레드의 동기화에 대해 알고 계신다면,
클리티컬 섹션에 대한 동시 접근을 하지 않도록 하는 뮤텍스를 알고 계실텐데요.
멀티 쓰레드 환경에서 뮤텍스를 사용자가 생각하지 않고 그냥 사용해도 안전하다 라는 뜻입니다.
http://bbs.kldp.org/viewtopic.php?t=1924
http://bbs.kldp.org/viewtopic.php?t=19248&highlight=%C0%E7%C1%F8%C0%D4+thread-safe
reentrant와 thread-safe의 차이점에 대해 나와있습니다.
strtok
strtok의 경우 Multi-thread환경에서는 사용하면 안되는데,
동기화를 하든 안하든 여러곳에서 호출하면 안되는 함수로 알고 있습니다.
이것도 thread-safe하지 않다고 말 할 수 있는걸까요 -_-a?
약간은 말장난같기도 하지만 궁금하군요.
Music is the greatest communication in the world.
[url]http://www-106.ibm.com/developerwor
http://www-106.ibm.com/developerworks/java/library/j-jtp09263.html
자바 쓰레드에 관한 이야기입니다. 제목이 Characterizing thread safety 입니다.
답변 감사합니다.
좋은 글들 감사드립니다.
역시 여긴 고수가 많군요.
간단하게 생각하자면, 한없이 간단하지만...
복잡하게 생각하자면, 한없이 복잡한 문제같네요.
아무튼 요지는 파악했으니, 감사합니다~
^^
[quote="elmia"]strtok의 경우 Multi-thread환경
그래서 strtok_r 함수가 있지 않나요? :)
Re: strtok
사실은 쓰다가 저도 좀 이상해서(제가 잘못 알고 있는 것 같아서) 안 올릴려고 했는데 이상하게 글이 올라가 있네요 ㅋ;;
아까 글 등록시키는 중에 등록 안 되고 멈춰있길래, 이상한거 같기도 해서 x 누르고 빠져나왔었는데 -_-; 등록 안된 것 처럼 보였는데 등록이 되어 있었군요;
헐헐;; 왠지 모를 민망함;; ㅋ
수정)
근데 위의 링크 찾아 보니 제 생각이 맞군요; ㅋ
http://home.postech.ac.kr/~sodomau
댓글 달기