pthread를 이용한 세마포어 구현
- 최초 등록일
- 2011.11.02
- 최종 저작일
- 2010.09
- 압축파일
- 가격 2,500원
소개글
pthread를 이용한 세마포어 구현 과제입니다.
컴파일 실행환경
GCC
본문내용
프로그래밍, 특히 유닉스시스템의 프로그래밍에서 세마포어는 운영체계의 자원을 경쟁적으로 사용하는 다중 프로세스에서, 행동을 조정하거나 또는 동기화 시키는 기술이다. 세마포어는 운영체계 또는 커널의 한 지정된 저장장치 내 값으로서, 각 프로세스는 이를 확인하고 변경할 수 있다. 확인되는 세마포어의 값에 따라, 그 프로세스가 즉시 자원을 사용할 수 있거나, 또는 이미 다른 프로세스에 의해 사용 중이라는 사실을 알게되면 재시도하기 전에 일정 시간을 기다려야만 한다. 세마포어는 이진수 (0 또는 1)를 사용하거나, 또는 추가적인 값을 가질 수도 있다. 세마포어를 사용하는 프로세스는 으레 그 값을 확인하고, 자원을 사용하는 동안에는 그 값을 변경함으로써 다른 세마포어 사용자들이 기다리도록 해야한다.
,....
Struct semaphore{
Int count;
Queue type queue;
}
void semWait(semaphore s)
{
s.count--;
if(s.count
do {
wait(full); //버퍼에 아이템이 생길 때까지 기다린다.
wait(mutex);
...
버퍼로부터 아이템을 가져온다.
...
signal(mutex);
signal(empty); //버퍼에 빈 공간이 생겼다고 알려준다.
...
아이템을 소비한다.
...
} while (1);
.....
.....
semWait구현
void semWait(semaphore* S,int pID) { //더이상생산물이없으므로프로세스를블락리스트에넣는다.
S->value--;
if(S->value listHead != NULL) { //큐에넣는다.
process* processPointer = S->listHead;
while(1){
if(processPointer->next!=NULL) processPointer = processPointer->next;
else break;
}
....
...
3.3 semSingnal구현
void semSignal(semaphore *S) { //프로세스를갖기위해
S->value++; //프로세스를 실행하므로 value값을 증가 시켜준다.
if(S->valuelistHead; //작업 수행
if(popProcess != NULL) {
S->listHead = S->listHead->next; //현재프로세스의다음프로세스를가르킨다.(현재꺼는실행)
flagConsumer[popProcess->pID] = 1;
....
...
압축파일 내 파일목록
실행/.goutputstream-HQHJJV
실행/.goutputstream-N4CNJV
실행/.goutputstream-TRIMJV
실행/.goutputstream-XMTMJV
실행/.vimrc
실행/a.exe.stackdump
실행/main.c
실행/makefile
실행/myshell.exe.stackdump
실행/REAEME.txt
참고 자료
없음