mutex lock 질문 드립니다.

jkam7520의 이미지

리눅스 초보 개발자 입니다.

여러개의 스레드를 아래와 같이 pthread_mutex_t에 대한 변수를 여러개 선언해서 접근제어가 가능한가요?

pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;

A_thead(){
pthread_mutex_lock(&mutex1);
a++;
pthread_mutex_unlock(&mutex1);
}

B_thead(){
pthread_mutex_lock(&mutex1);
printf("%d\n",a);
pthread_mutex_unlock(&mutex1);

pthread_mutex_lock(&mutex2);
b++;
pthread_mutex_unlock(&mutex2);
}

C_thead(){
pthread_mutex_lock(&mutex2);
printf("%d\n",b);
pthread_mutex_unlock(&mutex2);
}

zzzㄹㄷㅈㄹ3의 이미지

네 가능합니다. 다만 데드락 위험성으로 인해 좋은 설계 방향은 아닙니다.
데드락 시나리오를 여러개 만들고 테스트하여 사용하는게 바람직합니다.

jkam7520의 이미지

도움 주셔서 감사합니다.

라스코니의 이미지

mutex 사용의 원칙은 하나의 자원당 하나의 mutex를 사용하는 겁니다. 예를들어 스테이크를 먹는다고 할 때 나이프와 포크가 필요하면 나이프, 포크 각각에 mutex를 사용하는 것이죠.

jkam7520의 이미지

도움 주셔서 감사합니다.

chanik의 이미지

코드를 올릴때는 아래와 같은 식으로 code 태그로 감싸면 보기 좋게 나옵니다. 글 작성창을 잘 보시면 텍스트 포맷에 대한 도움말 링크도 있고 미리보기 기능도 있으니 한 번 눈여겨 보시길 권합니다.

<code lang="c">
A_thead(){
    pthread_mutex_lock(&mutex1);
    a++;
    pthread_mutex_unlock(&mutex1);
}
</code>

이렇게 작성하면 아래와 같이 나오는 식입니다.

A_thead(){
    pthread_mutex_lock(&mutex1);
    a++;
    pthread_mutex_unlock(&mutex1);
}
김정균의 이미지

bbcode 는 지양을.. migration 할 때 너무 힘듭니다.

<code lang="cpp"> ~~~ </code>

와 같이 html tag 형식을 사용해 주세요

chanik의 이미지

사정을 모르고 bbcode 위주로 써왔네요.
앞으로 신경쓰겠습니다.

위 글도 html tag로 수정해뒀습니다.

AustinKim의 이미지

예전에 뮤텍스를 최대한 많이 생성해 코드 블락을 뮤텍스로 보호하면,
레이스 컨디션을 방지할 수 있을 것이라 예상하고 생각했었는데요.

뮤텍스를 너무 많이 생성하면,
뮤텍스를 기다리다가 계속 잠들거나 서로 뮤텍스가 해제되기를 기다리며 잠드는 현상(보통 데드락이라고 하죠)을 겪을 수 있습니다.

(개인블로그)
http://rousalome.egloos.com

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.