마을버스의 이미지
라스코니의 이미지

읽을 때 atomic action 으로 실행하지 않는다면 읽을 때도 마찬가지로 동기화가 필요합니다.
쓸때 동기화가 필요했다면 읽을 때도 마찬가지로 동기화가 필요한 경우가 많습니다.

내가 읽어오는 중간에 상대방쪽에서 값을 변경할 수 있으니까요. 무결성이 문제가 되는 경우죠.

마을버스의 이미지

값이 변경되는건 없습니다... 최초 실행시 데이터를 읽어와서 메모리에 저장만 해놓고, 그 다음부터는 스레드들이 그 값에 대해서 그냥 읽어오기만 하기 때문에요...

라스코니의 이미지

그렇군요. 그러면 lock() 이 필요하지 않은 상황인 것으로 보이고요
flag 를 하나 둬서 읽어와서 메모리에 저장한 후 flag를 바꿔서 그 후부터 읽도록 하면 되겠네요.

shyblue의 이미지

ISOLATION LEVEL의 문제입니다.

즉, dirty read의 여부와 상관이 없다면, 동기화가 필요없습니다.
하지만, 읽은 값이 최종값이어야 한다는 보장이 필요하다면, 즉 수정중인 값을 읽어오지 않는다
라는 전제가 깔리면 동기화가 필요합니다.

읽고 있을때는 쓸수 없고, 쓰는중에는 읽을 수 없게 하는 COMMITTED READ 방식과
반대로, 값을 쓰는중에도 얼마든지 읽을 수 있지만, 그 읽은값이 수정전의 것인지 수정후의 것인지 보장하지 않는
UNCOMMITTED READ 방식 두가지중에서 상황에 맞는 방법을 사용하면 됩니다.

대게의 경우 현실적으로나 비용상으로나 UNCOMMITTED READ를 선택하게 됩니다.

時日也放聲大哭

마을버스의 이미지

최초 실행시에만 한번 등록되고, 프로그램 실행 도중에는 값에 대해서 변동이 있거나 하는게 없습니다..

그냥 스레드들이 그 값을 읽어오기만 할뿐이지요....

그리고 쉬운말로 풀이해서 설명해주세요.... 전 초보입니다..

본인의 지식에 대한 자랑보다는 소통이 중요하지 않을까요?

gilgil의 이미지

헐...
쉽게 친절하게 설명을 해 줬는데도
자신이 이해할 수 있는 쉬운 말로 설명해 달라니...
할 말이 없네요.

pjs의 이미지

오래된 글이지만 이런 한심한 글을 보니 그냥 지나칠 수 없네요..
기껏 설명해줬더니 감사하다는 말 한마디 없이 지식이 자랑하지 말라고 하질 않나.. 자기가 이해할 수 있도록 설명해달래질 않나..
저도 초보지만 저분이 님 골탕먹이려고 일부러 어려운말을 쓴거 같지는 않고 COMMITTED READ, UNCOMMITTED READ는 구글링만 해도 다 답이 나오는 용언입니다.
다른 분이 본인이 고민하는 사항에 대해서 힌트라도 줬으면 나머지는 자신이 좀 더고민하고 부족한 부분은 채우려고 노력하지도 않고 그저 남이 자기 입맛에 맞게 숟가락으로 밥떠먹여달라는 언행을 보니 참 한심할 따름입니다..

xylosper의 이미지

lock이라는게 mutex-lock을 말씀하신거라면, 구현 자체가 잘못됬다고 말씀드리고 싶습니다.
하나의 스레드에서 (recursive한게 아니라면) lock을 동시에 여러번할 수는 없습니다.
지금 Get()에서 이미 lock을 한 상태이기 때문에 그다음에는 unlock할때까지 그냥 계속 락걸린상태입니다.
락은 스레드에 거는거지 메모리에 거는게 아니기 때문에 하나의 스레드안에서 어디에 접근하느냐에 따라서 락이 바뀌는 일은 없습니다.
문제는 그 락거는게 명시적이지 않고 Get()이라는 함수안에서 행하고 있기 때문에 lock()과 unlock() 짝맞추기가 매우 혼동하기 쉬운 상황이라는 겁니다.
Get()을 두번 호출해도 뻑날테고, unlock()하지 않고 다음에 Get()을 호출해도 뻑날테고, Get()안에서 lock()이되는걸 모르고 lock()을 그냥 호출해도 뻑날겁니다.

마을버스의 이미지

자꾸 산으로 가지 마시고요....

최초 실행시 데이터 로드, 그 후 프로그램 작동시 돌아가면서 스레드들이 번갈아가며, 그데이터에 접근해서 읽기만 합니다...

읽기만 했을때는 스레드 동기화가 필요없다고 하는데... 프로그램 작동하면서 수정하는건 전혀없습니다... 그값그대로 종료시까지 그대로입니다... 메모리에 떠 있는 상수(?) 라고 해야되나.....

머 그런 개념인데요...

xylosper의 이미지

두번 락하려고 하시길래 두 번 락하지 말라고 했고, 더 나아가서 지금 구조는 혼동해서 두 번 락하기 쉬운구조니까 고치는게 좋다고 했더니 산으로 간다고 하다니, 산이 뭐고 바다가 뭔지나 아시는지 모르겠습니다.

익명 사용자의 이미지

쓰레드들이 시작되기 전에 A객체를 생성한다면 아무런 동기화도 필요하지 않습니다.
Get함수에도 lock은 필요없습니다.

마을버스의 이미지

역시 데이터에 대한 읽기의 경우에는 필요가 없는거군여...

답변 감사합니다...

댓글 달기

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