|
아무리 님의 답변을 읽어봐도 운영체제라는 어려운 책에 나오는 내용을 자바가 자기 언어에 맞게 구현해놓았다는 생각밖에 안드는데......
제가 잘못 이해 했나요?
저가 이해한 내용을 함수로 표현하면 아래와 같습니다.
CriticalSection;
FUNC()
{ a.........
CriticalSection.Lock();
b........
CriticalSection.Unlock();
c........
}
a 와 c부분은 여러 스레드가 아무때나 실행 해도 되지만 b는 반드시 허가을 받은 스레드만 실행 할수 있다.
이렇게 해석했는데 어째 제 생각이 틀렸는가요?
어메 어렵당 어려워...... 운영체제 다시 공부해나 하남
어메 어려운것....
아무든 이렇게 신경을 써 주셔셔 감사합니다. 임프님 외에 저의 질문에 이렇게 제마음을 후련하게 해주신분이 별로 없었습니다. 감사 감사 감사합니다.
그럼
라스코니 님이 쓰신 글 :
: : 저는 원래 크리티컬 섹션은 아예 진입이 안되는줄 알았거든요
:
: 음, 뭔가 혼동을 하신 듯 하네요. 진입이 선점(preemption)을 말하는 것인가요?
:
: 앞부분에서 재진입에 대해서 상세히 말씀을 드리지 않았는데...
:
: 재진입은 다음과 같은 경우에서,
:
: void func();
:
: thread A()
: {
: func();
: }
:
: thread B()
: {
: func();
: }
:
: 쓰레드 A가 먼저 수행되고 그 후에 쓰레드 B가 쓰레드 A를 선점(Preemption)했다고 가정했을 때 쓰레드 B가 종료된 후 쓰레드 A가 중단됬던 작업을 끝마쳤을 때에 func() 이 제대로 된 결과를 내었느냐 그렇지 않느냐를 따지는 것입니다.
:
: 대부분의 경우 함수와 임계영역과의 관계는 아래와 같이 가정하는 것이 편합니다.
:
: func()
: {
: ....
: critical section code
: ....
: }
:
: 임계 영역도 구성에 따라서 선점, 비선점 될수도 있구요 각각의 특징이 있습니다.
:
: 만약 위의 예에서 func()가 임계 영역을 가지고 있다면 상황이 복잡해지죠. 쓰레드 A가 쓰레드 B에 의해서 선점당할 때 임계 영역에 있었느냐 아니냐에 따라서 양상이 매우 달라지게 됩니다. 만약 임계 영역에 있었다면 쓰레드 B는 쓰레드 A가 임계 영역을 빠져나올 때까지 block 되어야 하죠. 물론 임계 영역에서도 선점이 가능하도록 되어 있을 때입니다.
|