[완료] 멀티스레드 프로그래밍시, data race 현상 질문입니다.

nockol의 이미지

다음과 같이, 하나의 데이터에 대해 어떤 문제가 생기는지요?

첫번째 경우: A 스레드가 쓰기 작업을 함과 '동시에', B 스레드가 읽기 작업을 할 때.

1. 쓰고있던 상태에서 읽었으므로, 쓰레기 값을 읽어들인다.
2. (반드시) 쓰기 전 값 또는, 쓴 후의 값을 읽어들인다. 즉, 적어도 오류는 생기지 않는다.

두번째 경우: A 스레드가 쓰기 작업을 함과 '동시에', B 스레드도 쓰기 작업을 할 때.

1. 동시에 값을 쓰게 되므로, 값이 깨져서 쓰레기 값으로 기록된다.
2. (반드시) 어느 값이건, 한 쪽의 스레드가 썼던 값이 기록된다. 즉, 적어도 오류는 생기지 않는다.

만약, 두 경우 모두 2번이 '반드시' 보장된다면, lock 작업이 많이 줄어들 것 같아서, 어떨지 정말 궁금하네요.

ifree의 이미지

공용 데이타의 관리가 멀티 쓰레드 프로그램의 핵심인데,
저렇게 함부로 읽고 쓰게 해서는 프로그램이 돌아가질 않죠.
일단 공용 데이타는 읽기 전용으로 하는 것이 최선이고
어쩔 수 없는 경우에만 lock 을 하거나 일부 함수형 언어에서는 STM 을 사용한 간접 접근 방식을 사용합니다.

nockol의 이미지

물론, 공용 데이터에 대해서는 lock이 중요합니다만, 제가 정말로 궁금한 점은,

저런 두가지 경우, 어떤 결과가 나오는가 입니다. :)

ifree의 이미지

멀티쓰레드 환경이라 해도 동일 주소의 메모리 접근은 순차적으로 일어나기 때문에 나중 값이 덮어쓰게 됩니다.

nockol의 이미지

싱글 프로세서(또는 코어)가 아닌, 멀티 프로세서(또는 코어)인 경우도 100% 동시에 메모리 접근은 일어나지 않는건가요?

ifree의 이미지

캐시 땜에 문제가 복잡해 질 수 있는데,
A 코어가 메모리에 쓰고 다시 B 코어가 메모리 쓰기를 한 후에 A 코어 캐시의 갱신이 이루어 지지 않은 상태에서 A 코어가 일기를 시도한다면 잘못된 데이타가 읽힐 수도 있겠습니다.

nockol의 이미지

낮은 확률이더라도, 잘못된 데이터(쓰레기 값이겠죠?)가 읽힐수도 있다는거군요...
답변 감사합니다. :)

댓글 달기

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