티스토리 뷰

네트워크프로그래밍

세마포어(2)

백수진 2021. 5. 31. 01:50
세마포어를 적용시켜 펜과 연필을 동시에 사용하는 코드를 작성해보자

펜과 연필에 대한 초기값을 3개로 설정하고 4개의 프로세스에서 각 프로세스마다 3번 실행하게 하여 12개를 출력해본 결과이다.

연필과 노트를 가지고 공부를 하는 도중에 다른 프로세스가 끼어들지 못하는 것은 세마포어를 사용했기 때문이다.

!초기값을 신경써서 operation을 적용해야함!


그렇다면 만약에 세마포어를 사용하지 않는다면  어떻게 될까?

라는 생각으로 코드를 바꿔 돌려보았다.

 

세마포어 적용 안 했을 때 발생하는 동기화 문제

fork( )를 2번실행했을 때는 문제가 없었지만 프로세스를 10개를 만들었을 때 동기화문제가 발생하였다.

이후, 위에서 세마포어를 적용한 코드를 돌린 것도 프로세스를 10개 만들었을 때를 확인해본 결과 동기화 문제가 세마포어때문에 발생하지 않는다는 것도 다시 확인하였다.


공유메모리 shmbusyaccess.c를 실행한 결과와 이를 해결하기 위해 세마포어를 사용한 결과

공유메모리만 사용한 경우 => shmbusyaccess 1234실행

shmbusyaccess를 통해 pid값과 getpid()가 다를때의 경우만 count를 증가하며 출력

 


공유메모리만 사용된 shmbusyaccess에서 세마포어를 같이 사용해 동기화 문제를 해결한 경우. pid==getpid()의 결과가 같아야 동시에 공유메모리에 접근하지 않은 것이고 이때 ' . '을 찍어서 출력해본 결과.

=> shmcontrol 1234 2345

=> shm공유메세지를 control세마포어로 컨트롤

 

실행 시간 동안 ' . ' 이 계속 찍히는 것으로 동기화문제를 해결함을 알 수 있음

 

'네트워크프로그래밍' 카테고리의 다른 글

스레드 취소요청  (0) 2021.06.02
THREAD 프로그래밍  (0) 2021.05.31
세마포어  (0) 2021.05.31
소켓 옵션 변경  (0) 2021.05.27
네트워크프로그래밍 - FIFO  (0) 2021.05.15