mutex lock에 대해서 궁금증..

la9527의 이미지

pthread_mutex에 대한 궁금한점에 대해
이해가 않가는 점에 대해 물어 볼려고 합니다.

예를 들어 쓰레드 두개가 돌아가고 있는데
두개의 쓰레드에서 공통으로 쓰는 변수 하나를 두고 데이터를 읽고 쓰고 하는데,
mutex lock을 쓰던 않쓰던 상관없이 잘 돌아가는데..
이것이 경쟁에 의해서 데이터를 읽고 쓰는 것인지 궁금합니다.

그리고 쓰레드 제가 약간 헤깔린 것이 쓰레드가 여러개이든 두개이든
mutex lock을 걸면 전체 쓰레드가 대기하다가 unlock을 걸때
다시 쓰레드가 돌아가는 것인지 궁금합니다.

제가 잘못 알고 있는것이 있으면 답변부탁 드리겠습니다.
프로그램을 하면서 계속 헤깔리고 있습니다.

lock걸고 않걸고에 대해서 프로그램이 이상하게 돌고
그러는 문제가 있어서 이글을 올립니다.

progcom의 이미지

la9527 wrote:
예를 들어 쓰레드 두개가 돌아가고 있는데
두개의 쓰레드에서 공통으로 쓰는 변수 하나를 두고 데이터를 읽고 쓰고 하는데,
mutex lock을 쓰던 않쓰던 상관없이 잘 돌아가는데..
이것이 경쟁에 의해서 데이터를 읽고 쓰는 것인지 궁금합니다.

lock 없이 잘 돌아간다는건, 어쩌다 보니 엉키지 않은 것 뿐인겁니다. 신경쓰지 않고 실제로 도입했다가 문제가 생기면 난리 나는거지요 :)

la9527 wrote:

그리고 쓰레드 제가 약간 헤깔린 것이 쓰레드가 여러개이든 두개이든
mutex lock을 걸면 전체 쓰레드가 대기하다가 unlock을 걸때
다시 쓰레드가 돌아가는 것인지 궁금합니다.

전체 쓰레드는 대기하지 않습니다. 그 mutex에 대해 lock을 거는 쓰레드만 대기합니다. 즉, 현재 lock 상태인 mutex에 pthread_mutex_lock()을 호출한 쓰레드만 대기 상태에 빠집니다. unlock을 하면 lock을 호출한 순서대로 처리가 계속 이루어집니다. 즉, 해당 mutex와 관계가 없는 쓰레드는 lock을 걸건 말건 무시하고 진행합니다.

IsExist의 이미지

lock 하면서 이미 다른 스레드가 lock을 건 경우에 대해 대기로 들어가는 방식도 있고 바로 리턴되는 방식도 있습니다.

상황에 따라 적절히 호출하면 됩니다.

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

la9527의 이미지

프로그램 진행하는데 Single과, Multi CPU 에서 많은 차이를 보여서 mutex 때문에 그런가 했더니 역시 답변주신분들의 말씀대로 역시 였네요.

도움을 주셔서 감사합니다.

댓글 달기

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