GnuSmalltalkUsersGuide:BaseChapter 146

From 흡혈양파의 번역工房
Jump to navigation Jump to search
Semaphore

Semaphore

네임스페이스 Smalltalk에 정의됨

슈퍼클래스: LinkedList

범주: 언어-프로세스


나의 인스턴스들은 계수하는 세마포어(counting semaphore)를 나타낸다. 나는 세마포어의 가용성을 시그널링할 수 있는 메서드와, 가용성을 기다리기 위한 메서드를 제공한다. 뿐만 아니라 임계 영역을 구현하기 위한 메서드도 몇 가지 제공한다.


Semaphore 클래스: 인스턴스 생성

forMutualExclusion

위에 시그널이 있는 새 세마포어를 응답하라. 이러한 세마포어는 세마포어를 임계 영역으로 사용할 때 유용한 지름길이 된다.

new

새 세마포어를 응답하라.


Semaphore: 접근하기

name

수신자를 위해 사용자 친화적인 이름을 응답하라.

name: aString

수신자를 위해 사용자 친화적인 이름을 응답하라.

waitingProcesses

현재 수신자에게서 대기 중인 프로세스의 Array를 응답하라.

wouldBlock

수신자에게서 대기가 현재 프로세스를 중지시킬 것인지 응답하라.


Semaphore: builtins

lock

수신자를 sleep 상태로 놓지 않고 세마포어에서 대기를 시도하는 프로세스를 강제로 막아라. 이전에도 그런 경우가 있었는지 응답하라.

notify

세마포어에서 대기 중이던 프로세스가 있을 경우 그 중 하나를 재개하라. 어떤 프로세스도 대기하고 있지 않은 경우 세마포어에 시그널을 남기지 말라.

notifyAll

세마포어에서 대기 중이던 프로세스가 있을 경우 모두 재개하라. 어떤 프로세스도 대기하고 있지 않은 경우 세마포어에 시그널을 남기지 말라.

signal

수신자를 시그널링하고 대기 중인 프로세스가 있다면 재개하라.

wait

수신자가 시그널링될 때까지 대기하고, 아직 없다면 실행 중인 프로세스를 중지하라.

waitAfterSignalling: aSemaphore

aSemaphore에게 시그널링 후 수신자가 시그널링될 때까지 대기하며, 아직 실행 프로세스가 중지되지 않은 경우 중지시켜라. 수신자에게서 대기하기 전에 #notify와 #notifyAll이 사용될 경우 경합 조건을 피하는 데에 필요하다: 아니면 aSemaphore이 시그널링되는 시간과 프로세스가 수신자를 대기하기 시작하는 시간 중 하나라도 프로세스가 전송할 경우 알림(nofication)이 손실된다.


Semaphore: 상호 배제

critical: aBlock

수신자가 해제될 때까지 기다리고 aBlock을 실행한 후 수신자를 다시 시그널링하라. aBlock을 평가한 결과를 리턴하라.


Semaphore: 인쇄하기

printOn: aStream

사람이 읽을 수 있는 수신자의 표현을 aStream 상에 인쇄하라.


Notes