semaphore > 여러 스레드나 프로세스에서 하나의 공유자원을 사용하여 누군가는 값을 변경시키고, 누군가는 값을 읽는것이 동시에 일어나 잘못된 값을 읽어오는 등의 문제를 해결하기위해 사용 mutex와 같이 임계구역을 설정하여 공유자원에 대한 접근을 제어한다. 하지만 한번에 하나의 프로세스의 접근을 허용하는 mutex와 다르게 semaphore는 복수의 프로세스에대해 접근을 제어할 수 있다 sem_open > 이름있는 semaphore를 생성하는 함수 *name = 생성하고자하는 semaphore의 이름 oflag = 세마포어의 플래그, OCREAT, OEXCL이 있으며 조합도 가능 OCREAT은 생성관련 플래그, OEXCL은 중복된 이름의 세마포어가 있는지 체크하는 플래그 mode = 접근 권한을 설정하는 옵션 value = 세마포어의 수이며 0이상의 양수이어야함, 7이라면 한번에 7개만큼 접근을 허용함
구현순서 > argv 확인 파싱 및 초기화 스레드 생성 먹기 잠자기 생각하기 모니터링하기 리소스 회수하고 종료하기 Main > argv확인 > 파싱 및 초기화 > 스레드 생성 > 스레드 내부 > > 먹기 잠자기 생각하기 모니터링하기 > 식사시간 확인 > 식사횟수 확인 > 리소스 회수하고 종료하기 >
mutex > 여러 스레드나 프로세스에서 하나의 공유자원을 사용하여 누군가는 값을 변경시키고, 누군가는 값을 읽는것이 동시에 일어나 잘못된 값을 읽어오는 등의 문제를 해결하기위해 사용 특정 구역을 하나의 프로세스만 접근할 수 있는 임계구역으로 만들고 사용중일 때는 lock을 걸어 다른 프로세스는 접근하지 못하도록 하고 다 사용했을때에는 unlock하여 다른 프로세스가 접근할 수 있도록 함 ex) pthreadmutexinit > mutex를 사용하기위해 pthreadmutext를 초기화해주는 함수 첫번째 인자는 mutex, 두번째 인자는 옵션이며 기본적으로 NULL을 사용함 성공시 0반환, 실패시 에러넘버를 반환함 ptheradmutexlock > 임계구역에 하나의 프로세스만 접근할 수 있도록 lock을 걸어주는 함수 ptheradmutexunlock > lock이 걸린 임계구역에 다른 프로세스가 접근할 수 있도록 lock
Thread란 > 하나의 프로그램이 돌아가는 프로세스 내에서 실행되는 여러개의 흐름 단위이며, 하나의 프로세스내에서 여러개의 스레드가 돌아가며 여러가지 일을 동시에 수행하는 것 처럼 보임 여러개의 프로세스가 동시에 실행되는 멀티태스킹보다 문맥교환의 속도가 빨라 작업 전환의 속도를 절약하여 더 빠르게 실행할 수 있음 pthread란 > POSIX thread의 약자로 유닉스계열 POSIX시스템에서 스레드를 편하게 만들 수 있도록 하는 API이다 ** 헤더를 include하여 사용할 수 있다 pthread_create() >> >> 1. 첫 인자 = pthread 식별자로 스레드가 성공적으로 생성되면 스레드 식별값이 주어짐 >> 2. 두번째 인자 = 스레드 속성으로 기본 옵션 사용시 NULL >> 3. 세번째 인자 = 스레드가 실행될 시 시작될 함수, 이 함수 내에서 sleep실행시 다른 스레드가 돌아감 >> 4. 네번째 인자 =
운영체제의 교착(Deadlock)문제를 설명할 수 있는 철학자의 만찬문제 프로세스 스레딩의 기본을 익히고 스레드를 만들고 사용하는것을 실습할 수 있음 조건 > 한명이상의 철학자가 원형 테이블에 앉아 먹기, 생각하기, 잠자기 셋중 하나의 행동을 취함 철학자는 세가지 행동중 그 어떤 행동도 동시에 진행할 수 없고 한가지 행동만을 수행함 철학자들은 두개의 포크를 사용해 식사를 하며 포크는 각자의 왼쪽, 오른쪽에 하나씩 놓여있고 하나의 포크를 두 철학자가 동시에 사용할 수 없음 철학자는 절대 굶고있으면 안되며 철학자끼리 서로 그 어떤 정보도 교환해서는 안됨 철학자는 식사가 끝나면 포크를 내려놓고 잠을자기 시작함 잠을 잔 철학자는 깨어나 생각을 시작함 철학자가 한명이라도 사망할 시 프로그램은 종료되어야함 각 철학자는 스레드로 구현되어야하며 포크가 복제되지않도록 포크의 현재상태를 뮤텍스로 보호해야함 각 프로그램은 철학자의 수, 철학자의