필로소프 풀이

이호용·2021년 7월 12일
0

Philosophers

목록 보기
2/5

학습목표 : 기본적인 스레드를 훈련하고 너는 쓰레드를 어떻게 만드는지 배우게 된다. 뮤텍스를 발견하게 될 것입니다.

스레드에 대해 배운다는데, 스레드 개념을 따로 공부해봐야겟지? 스레드를 한번 공부해보았다.
프로그램, 프로세스, 스레드 차이
스레드란?
양희재 교수님과 함께, 이거 보면 많이 도움될듯. 투머치인거 같지만 운영체제 공부해두면 좋으니까~~~

무엇을 해야하오?!

무엇을 해야하는지 살펴보고 간단한 개념 공부를 하고 넘어가자.

프로그램 사항
1. 철학자는 스레드이다.(예전 과제에서는 철학자가 프로세스 인것도 만들 었다고한다.)
2. 원탁에 앉아있고, 양 옆에 포크가 있다. (예전 과제에선 테이블 중앙에 포크가 있기도하고 그랫는데, 많이 쉬워진거 같다.)

조건

철학자는 정해진 시간 안에 먹지 않으면 죽는다.
철학자가 죽으면 프로그램을 종료한다. (죽는 시간 기준10ms 안에 종료 메세지를 보내야 한다.)
철학자는 먹기위해 포크 2개를 집어야 한다.
철학자는 먹고 -> 자고 -> 생각하는 것을 반복한다.
프로그램 실행 인자는 총 5개 or 6개이다.
./philosophers number_of_philosophers time_to_die time_to_eat time_to_sleep [number_of_times_each_philosopher_must_eat]
ex) ./philosophers 3 510 100 100 2 으로 실행한다면
철학자 수 3명
510ms안에 먹어야 철학자 생존
100ms동안 먹는다
100ms동안 잔다
모든 철학자가 2번 먹으면 프로그램 종료

스레드 사용시 고려할 점.

  • 스레드는 code,data,Heap영역을 공유한다. 이러한 스레드들이 함께 사용하는 공간을 임계구역이라고 한다.
  • 이 임계구역을 수정하다가 다른 쓰레드로 넘어가서 수정하고 있는 데이터를 다시 건드리면 문제가 발생할 수 있다.
  • 이러한 임계구역 문제를 해결하기 위해 사용하는 동기화 도구라는게 있다.

임계구역 solution

Solution
아래 세가지를 모두 만족해야함.

  • Mutual exclusion (상호배타): 오직 한 쓰레드만 진입(다른 하나가 임계구역에 들어가면 다른것들은 못들어가게함.)
  • Progress (진행): 진입 결정은 유한 시간 내 (임계구역에 들어갈수 있는것들중에 어떤게 먼저 들어갈지 정함.)
  • Bounded waiting (유한대기): 어느 쓰레드라도 유한 시간 내 (어느 스레드든 기다리면 임계구역에 진입 가능)

예를 들어 A, B, C 쓰레드가 공유하고 있는 int count라는 변수를 동시에 수정한다면 결과가 이상하게 나올 것 이다. 또한 두 개의 작업이 서로 상대방의 작업이 끝나길 무한히 기다리거나(deadlock, 교착상태) 우선순위가 낮아서 아예 자원할당을 받지 못하는 경우도 있다(stravation, 기아상태).
이를 해결하기 위해 공유하고 있는 data를 Exclusive Access, 어느 한 스레드가 공유 변수를 사용하는 동안 다른 스레드가 접근하지 못하도록 막는 방법을 공부했다.
Mutex와 Semaphore에 대한 이론적 개념과 이를 간단한 예제를 통해 구현할 수 있었다.

동기화 도구 (Synchronization Tools)

  • Critical Section
  • Semaphores
  • Monitors
  • Misc.
  • Mutex.

매우좋당~ Critical Sectiton, Mutex, Semaphore, Event 설명

mutex

뮤텍스란 MUTual EXclusion 으로 우리말로 해석하면 '상호 배제'라고 한다.

  • 쓰래드간 또는 프로세스간에 공유 리소스에 대한 접근을 리소스를 "locking" 과 "unlocking"을 통해 조율하게된다.

  • 그럼 Critical Section와 mutesx 차이는 무엇인가? 그 첫째는 Critical Section은 좀더 빠른 처리를 요하는 경우, 그리고 critical section의 경우 스레드간 신호만 가능하다. mutex는 스레드 프로세스간 모두 사용가능하다. (과제에서 mutex를 손에 쥐어준건, 과제가 패치되기전, 철학자를 프로세스로 생성해야 했을떄 사용하기 위해 mutex를 주어준거 같다.)

  • 세마포어는 한정된 수의 사용자만을 지원할 수 있는 공유 자원에 대한 접근을 통제하는데 유용하다.

요것도 살폅조자 : 프로세스 간 통신(Inter-Process Communication, IPC)

juhopark

과제를 시작하기전 친한 카뎃인 juhopark에게 공략법을 좀 구했다. 감사합니다. juhopark

뭔가 좋은거 같은데, 영어다 보고 필요함이 느껴지면 다시보자.
간단한 예제-누군가 한명이 반대 젓가락을 먼저드는 로직
pthread 사용법 - 허용함수 사용법
교착상태 설명

0개의 댓글