이런 프로그램에 동기화가 필요 할까요?

kknd345의 이미지

공유 메모리를 하나 잡았는데

그 공유 메모리를 쓰는 프로세스는 하나 뿐이고

읽어 가는 프로세스는 여러개입니다.

쓰는 프로세스는 키보드 입력이 있을시에만 공유 메모리 내용을 바꾸고요
읽어 가는 프로세스는 sleep이 50 밀리 세컨드 정도 걸어서 50 밀리 세컨 초에 한번씩 읽어 갑니다.

이 때 세마포어를 이용해서 공유 메모리에 대해 동기화를 해 줘야 하나요? 아님 필요 없나요?
( 읽어 가는 프로세스가 50밀리 세컨드 정도 느려지는건 무시할수 있습니다.)

hokim의 이미지

그래도 쓰는 사이에 읽어갈 우려가 있어보이기 때문에 semaphore로 mutex를 구현하는게 안전할 것 같군요

mr.lee의 이미지

제 생각엔 쓰기에서 context switching 이 일어나기 전에 읽어간다면 변경전 값을 가져갈테고, 이후라면 변경후 값을 가져갈것인데 읽기가 50밀리 세컨 간격으로 계속 읽어간다는건 쓰여진 시각과 굳이 동기화를 필요로 하는건 아니므로.. 뮤텍스, 세마포어 사용하지 않아도 될 듯 합니다.

IsExist의 이미지

그래도 동작을 확신할 수 없으므로 보호해주는게 맞나고 봅니다.

미시세계는 현묘불측합니다.

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

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

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

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

chadr의 이미지

단순한 int 값 하나 읽기 쓰기도 원자성을 보장하지 않습니다..

그렇기 때문에 동기화를 맞추시는 것이 나중에 머리털 빠지지 않는 길입니다.:)

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

hyperhidrosis의 이미지

bool stop; // 전역

// 워커 쓰레드
while(!stop)
{
//....
}

이렇게 만들고 다른 쓰레드에서 stop=true; 라고 하는것도 문제가 발생할 수 있나요?

익명 사용자의 이미지

int는 원자성이 보장된다고 볼수 있지 않나요?
내부적으로 어떠한 작업이 일어나든 완료전단계에서 다른 thread에게 영향을 미칠 수 없다고 보는데요....

익명 사용자의 이미지

단순한 int 값 하나 읽기 쓰기도 원자성을 보장하지 않습니다..
의미를 잘못 해석했네요.... ^^;
윗 글 잘못썼네요

익명 사용자의 이미지

단순한 int 값 하나 읽기 쓰기도 원자성을 보장하지 않습니다..
의미를 잘못 해석했네요.... ^^;
윗 글 잘못썼네요

익명 사용자의 이미지

단순한 int 값 하나 읽기 쓰기도 원자성을 보장하지 않습니다..
의미를 잘못 해석했네요.... ^^;
윗 글 잘못썼네요

kuaaan의 이미지

Anonymous wrote:
int는 원자성이 보장된다고 볼수 있지 않나요?
내부적으로 어떠한 작업이 일어나든 완료전단계에서 다른 thread에게 영향을 미칠 수 없다고 보는데요....

int 정도면 원자성이 있다고 생각합니다.
단. 'Single Processor Machine'에 한해서입니다.
시스템콜 하나가 실행되는 중간에 context switching이 일어나거나
4byte int를 쓰는데 2바이트 쓰고나서 context switching이 일어나지는 않을 거라고 생각합니다만...?

----------------------------------------------
한번뿐인 인생....
미친듯이 살아보자!
----------------------------------------------

neogeo의 이미지

kuaaan wrote:
Anonymous wrote:
int는 원자성이 보장된다고 볼수 있지 않나요?
내부적으로 어떠한 작업이 일어나든 완료전단계에서 다른 thread에게 영향을 미칠 수 없다고 보는데요....

int 정도면 원자성이 있다고 생각합니다.
단. 'Single Processor Machine'에 한해서입니다.
시스템콜 하나가 실행되는 중간에 context switching이 일어나거나
4byte int를 쓰는데 2바이트 쓰고나서 context switching이 일어나지는 않을 거라고 생각합니다만...?

읽고 쓰기 라고 하신겁니다.

i ++;

만 해도 원자성이 보장이 안되죠.

Neogeo - Future is Now.

eungkyu의 이미지

동기화 코스트가 너무 크다고 생각하신다면 spin lock으로 구현하는 것도 한 방법인 듯 하네요

girneter의 이미지

eungkyu wrote:

동기화 코스트가 너무 크다고 생각하신다면 spin lock으로 구현하는 것도 한 방법인 듯 하네요

어떻게 하는건지 살짝 가르침을 주시면 감사하겠습니다

개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?

chadr의 이미지

kuaaan wrote:
Anonymous wrote:
int는 원자성이 보장된다고 볼수 있지 않나요?
내부적으로 어떠한 작업이 일어나든 완료전단계에서 다른 thread에게 영향을 미칠 수 없다고 보는데요....

int 정도면 원자성이 있다고 생각합니다.
단. 'Single Processor Machine'에 한해서입니다.
시스템콜 하나가 실행되는 중간에 context switching이 일어나거나
4byte int를 쓰는데 2바이트 쓰고나서 context switching이 일어나지는 않을 거라고 생각합니다만...?

쓰기도 원자성이 보장되지 않습니다. 원자성은 어셈코드 하나에 처리가 가능한 명령이면 원자성이 보장 된다고 생각 할 수 있습니다.

int b = i;

mov         eax,dword ptr [i] 
mov         dword ptr [b],eax 

단순한 int 형 변수 b에 i라는 int 형 값을 쓰는데도 위와같이 어셈코드가 두개로 나뉘어질 수 있습니다. 어셈코드가 두개라는 말은 첫번째 코드가 실행되고 그 후에 컨텍스트 스위칭이 일어나지 말라는 보장은 없습니다. :D

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

댓글 달기

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