크리티컬 섹션??

ddoman의 이미지

윈도용 네트웍 프로그램을 하나 분석해 보고 있는데요.

CRITICAL_SECTION이라는 객체를 사용하더라구요.
대충..쓰레드가 여러개 있을땐 그 객체가 생성된 동안에는
다른 쓰레드가 전부 블럭된다고 알고있는데( 잘 모름 )
암튼..
이게 리눅스에도 비슷한 기능이 있는지..
사용하는걸 봐선 Mutex랑은 다른것 같기도하구..
POSIX에 포함된 내용인가요?
일단...크리터컬 섹션에 대해 아시는분 좀 설명과 함께
리눅스에서의 지원여부를 좀 알려주세요.

charsyam의 이미지

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 간에 공유할 수 없고,
실행 속도 측면에서 아주 약간 빠르다고 합니다.
charsyam 님 말씀처럼 작동 방식은 mutex 입니다.

unix 나 win32 모두 mutex 은 thread 동기화 및 process
동기화에 모두 사용될 수 있는데, pthread 라이브러리인 경우,
리눅스에서는 process 동기화를 위한 뮤텍이 지원되지 않습니다.

하지만, 리눅스에서도 semget 같은 IPC 세마포어를 사용해서
pthread_mutex 처럼 작동하게 구현할 수는 있구요.

Orion Project : http://orionids.org

rockme의 이미지

제가 알기로 크리티컬 섹션은 프로세스간 동기화 할때 블록되는 곳을 말하는 것이고 이것을 구현한 것이 뮤텍스, 세마포어라고 알고 있는데 위에서 말씀 하시길 크리티컬 섹션이라는 것이 뮤텍스와 같은 동기화 방법으로 용어를 사용하고 있습니다. 저는 초보로써 혼동이 많이 되는데 제가 잘못 알고 있는 건지요.

The sun behind the clouds is still shining

blackmir의 이미지

윈도우 API중에 CRITICAL_SECTION이라는 구조체가 있으며, 이 구조체와

EnterCriticalSection, LeaveCriticalSection이라는 함수를 사용해

특정 영역안에는 언제나 한 Thread만이 작업을 할 수 있도록 하는

윈도우 자체의 함수를 말씀하시는 것 같습니다.

이 것과 비슷한 리눅스의 함수등을 물어보신 것 같습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.