이런 프로그램에 동기화가 필요 할까요?
글쓴이: kknd345 / 작성시간: 수, 2005/09/28 - 11:52오후
공유 메모리를 하나 잡았는데
그 공유 메모리를 쓰는 프로세스는 하나 뿐이고
읽어 가는 프로세스는 여러개입니다.
쓰는 프로세스는 키보드 입력이 있을시에만 공유 메모리 내용을 바꾸고요
읽어 가는 프로세스는 sleep이 50 밀리 세컨드 정도 걸어서 50 밀리 세컨 초에 한번씩 읽어 갑니다.
이 때 세마포어를 이용해서 공유 메모리에 대해 동기화를 해 줘야 하나요? 아님 필요 없나요?
( 읽어 가는 프로세스가 50밀리 세컨드 정도 느려지는건 무시할수 있습니다.)
Forums:
그래도 쓰는 사이에 읽어갈 우려가 있어보이기 때문에 semaphore로
그래도 쓰는 사이에 읽어갈 우려가 있어보이기 때문에 semaphore로 mutex를 구현하는게 안전할 것 같군요
제 생각엔 쓰기에서 context switching 이 일어나기 전에 읽
제 생각엔 쓰기에서 context switching 이 일어나기 전에 읽어간다면 변경전 값을 가져갈테고, 이후라면 변경후 값을 가져갈것인데 읽기가 50밀리 세컨 간격으로 계속 읽어간다는건 쓰여진 시각과 굳이 동기화를 필요로 하는건 아니므로.. 뮤텍스, 세마포어 사용하지 않아도 될 듯 합니다.
그래도 동작을 확신할 수 없으므로 보호해주는게 맞나고 봅니다.미시
그래도 동작을 확신할 수 없으므로 보호해주는게 맞나고 봅니다.
미시세계는 현묘불측합니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
단순한 int 값 하나 읽기 쓰기도 원자성을 보장하지 않습니다..
단순한 int 값 하나 읽기 쓰기도 원자성을 보장하지 않습니다..
그렇기 때문에 동기화를 맞추시는 것이 나중에 머리털 빠지지 않는 길입니다.:)
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
bool stop; // 전역// 워커 쓰레드while
bool stop; // 전역
// 워커 쓰레드
while(!stop)
{
//....
}
이렇게 만들고 다른 쓰레드에서 stop=true; 라고 하는것도 문제가 발생할 수 있나요?
int는 원자성이 보장된다고 볼수 있지 않나요?내부적으로 어떠한 작업
int는 원자성이 보장된다고 볼수 있지 않나요?
내부적으로 어떠한 작업이 일어나든 완료전단계에서 다른 thread에게 영향을 미칠 수 없다고 보는데요....
단순한 int 값 하나 읽기 쓰기도 원자성을 보장하지 않습니다.. 의
단순한 int 값 하나 읽기 쓰기도 원자성을 보장하지 않습니다..
의미를 잘못 해석했네요.... ^^;
윗 글 잘못썼네요
단순한 int 값 하나 읽기 쓰기도 원자성을 보장하지 않습니다.. 의
단순한 int 값 하나 읽기 쓰기도 원자성을 보장하지 않습니다..
의미를 잘못 해석했네요.... ^^;
윗 글 잘못썼네요
단순한 int 값 하나 읽기 쓰기도 원자성을 보장하지 않습니다.. 의
단순한 int 값 하나 읽기 쓰기도 원자성을 보장하지 않습니다..
의미를 잘못 해석했네요.... ^^;
윗 글 잘못썼네요
[quote="Anonymous"]int는 원자성이 보장된다고 볼수 있지
int 정도면 원자성이 있다고 생각합니다.
단. 'Single Processor Machine'에 한해서입니다.
시스템콜 하나가 실행되는 중간에 context switching이 일어나거나
4byte int를 쓰는데 2바이트 쓰고나서 context switching이 일어나지는 않을 거라고 생각합니다만...?
----------------------------------------------
한번뿐인 인생....
미친듯이 살아보자!
----------------------------------------------
[quote="kuaaan"][quote="Anonymous"]int는
읽고 쓰기 라고 하신겁니다.
i ++;
만 해도 원자성이 보장이 안되죠.
Neogeo - Future is Now.
동기화 코스트가 너무 크다고 생각하신다면 spin lock으로 구현하는
동기화 코스트가 너무 크다고 생각하신다면 spin lock으로 구현하는 것도 한 방법인 듯 하네요
[quote="eungkyu"]동기화 코스트가 너무 크다고 생각하신다
어떻게 하는건지 살짝 가르침을 주시면 감사하겠습니다
개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?
[quote="kuaaan"][quote="Anonymous"]int는
쓰기도 원자성이 보장되지 않습니다. 원자성은 어셈코드 하나에 처리가 가능한 명령이면 원자성이 보장 된다고 생각 할 수 있습니다.
단순한 int 형 변수 b에 i라는 int 형 값을 쓰는데도 위와같이 어셈코드가 두개로 나뉘어질 수 있습니다. 어셈코드가 두개라는 말은 첫번째 코드가 실행되고 그 후에 컨텍스트 스위칭이 일어나지 말라는 보장은 없습니다. :D
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
댓글 달기