크리티컬 섹션??
글쓴이: ddoman / 작성시간: 금, 2002/12/27 - 5:09오후
윈도용 네트웍 프로그램을 하나 분석해 보고 있는데요.
CRITICAL_SECTION이라는 객체를 사용하더라구요.
대충..쓰레드가 여러개 있을땐 그 객체가 생성된 동안에는
다른 쓰레드가 전부 블럭된다고 알고있는데( 잘 모름 )
암튼..
이게 리눅스에도 비슷한 기능이 있는지..
사용하는걸 봐선 Mutex랑은 다른것 같기도하구..
POSIX에 포함된 내용인가요?
일단...크리터컬 섹션에 대해 아시는분 좀 설명과 함께
리눅스에서의 지원여부를 좀 알려주세요.
Forums:
CRITICAL_SECTION 과 Mutex 는 조금 틀리기는 하지만,
CRITICAL_SECTION 과 Mutex 는 조금 틀리기는 하지만, 같은 목적으로
거의 같은 일을 합니다. 동기화를 위해서죠. 보통 윈도우쪽에서
CRITICAL_SECTION은 유저레벨에서 동기화를 맞추고 Mutex 는 커널
객체가 생깁니다. 그냥 Linux 에서는 CRITICAL_SECTION 대신에
Mutex를 쓰시면 됩니다. 그럼...
=========================
CharSyam ^^ --- 고운 하루
=========================
완벽히 지원됩니다.
:(
리눅스나 유닉스들은 대부분 pthread라이브러리를 지원합니다.
pthread설명을 보면 짧은동안의 locking 메카니즘으로는
mutex를 사용하고 오랜동안의 pending 메카니즘으로는
condition variable을 사용합니다.
mutex의 개념은 그런대로 쉬우나 condition variable은
윈도우즈의 무슨 object(까먹었네요...freeamp소스보면 있는데...)
란 비슷한 개념인데...
이해하기가 만만찮습니다...(제가 머리가 나빠서리....^^)
Practical UNIX Programming이란 책을 보면 9장과 10장에 설명이
아주 잘되어 있는데, 제가 알기론 쓰레드의 동기화 메카니즘 설명으로논
Best입니다..
그럼...
서명.....음, 서명이라...
아싸!!! Three Go!
win32 CRITICAL_SECTION 은 process 간에 공유할
win32 CRITICAL_SECTION 은 process 간에 공유할 수 없고,
실행 속도 측면에서 아주 약간 빠르다고 합니다.
charsyam 님 말씀처럼 작동 방식은 mutex 입니다.
unix 나 win32 모두 mutex 은 thread 동기화 및 process
동기화에 모두 사용될 수 있는데, pthread 라이브러리인 경우,
리눅스에서는 process 동기화를 위한 뮤텍이 지원되지 않습니다.
하지만, 리눅스에서도 semget 같은 IPC 세마포어를 사용해서
pthread_mutex 처럼 작동하게 구현할 수는 있구요.
Orion Project : http://orionids.org
용어 혼동
제가 알기로 크리티컬 섹션은 프로세스간 동기화 할때 블록되는 곳을 말하는 것이고 이것을 구현한 것이 뮤텍스, 세마포어라고 알고 있는데 위에서 말씀 하시길 크리티컬 섹션이라는 것이 뮤텍스와 같은 동기화 방법으로 용어를 사용하고 있습니다. 저는 초보로써 혼동이 많이 되는데 제가 잘못 알고 있는 건지요.
The sun behind the clouds is still shining
윈도우 API중에 CRITICAL_SECTION이라는 구조체가 있으며,
윈도우 API중에 CRITICAL_SECTION이라는 구조체가 있으며, 이 구조체와
EnterCriticalSection, LeaveCriticalSection이라는 함수를 사용해
특정 영역안에는 언제나 한 Thread만이 작업을 할 수 있도록 하는
윈도우 자체의 함수를 말씀하시는 것 같습니다.
이 것과 비슷한 리눅스의 함수등을 물어보신 것 같습니다.
댓글 달기