[Philosophers] 🚨 usleep 함수의 문제점 ?
·
42Seoul
과제를 진행하다보면, 의도했던 상황보다 시간이 밀려서 찍히는 걸 볼 수 있다.  man 페이지를 보면 시스템 호출 처리에 소모된 시간이나 시스템 타이머 정밀도에 따라 잠드는 시간이 살짝 길어질 수 있다고 나와있는데, 그 과정에 대해 알아보겠당 🤨 다음은 sleep() 함수 실행 시 일어나는 일이다.시스템 호출이 일어나 시스템 호출 핸들러가 실행되어 sleep()을 호출한 프로세스(스레드)를 타이머 대기 큐에 넣는다.CPU 스케쥴링에 의해 다른 프로세스(스레드)가 실행된다.한편 시스템에서는 주기적으로 타이머 인터럽트가 발생하고 운영체제의 인터럽트 핸들러를 실행한다. 인터럽트 핸들러가 하는 일 중의 하나가 타이머 대기 큐를 확인하는 것인데, 이 때 큐의 맨 앞에 있는 프로세스(스레드)를 깨워야 할 시점이 ..
[Philosophers] ⚖️ pthread_join vs pthread_detach
·
42Seoul
pthread_create()를 사용해 생성된 스레드는 메인 스레드가 종료되면 함께 종료가 되고, 그 과정에서 메모리를 자동으로 회수하지 않는다. 그래서 pthread_join나 pthread_detach을 통해 스레드가 종료될 때 메모리를 회수해줘야 한다 ! 두 함수 모두 스레드의 종료와 관련된 함수같은데 ... 🤔 어떤 점이 다른지, 어떤 함수를 써야할 지 궁금했다. 먼저, 스레드는 합류 가능 상태이거나 합류된 상태, 분리된 상태임을 알아야 한다. 여기서 말하는 합류는 join이 가능한 상태를 말한다. pthread_join 대상 스레드를 호출 스레드에 합류시키고 대상 스레드가 종료할 때까지 기다린다. 가령, A pthread_join B 의 순서를 가지는 코드가 있다면 대상 스레드가 종료될 때까지 ..
[Philosophers] 2. 스레드와 뮤텍스
·
42Seoul
Philosophers는 동시성과 교착상태를 설명하는 대표적인 예시인 "식사하는 철학자 문제"를 직접 구현해보는 과제이다. 특히, Mandatory 파트는 멀티 스레드 환경에서 공유 자원에 대한 상호 배제 달성을 위해 뮤텍스를 사용해야 한다. 과제를 시작하기 전 알아야 할 사전 지식에 대해 알아보겠다 🥸 P.S. 왜 멀티 스레드 환경에서 공유 자원에 대한 관리가 필요한지, 관리를 위한 방법에는 무엇이 있는지 정도를 알아보는 매우 간단한 글입니다  1. Thread✨ 프로세스란?실행 중인 프로그램이다. 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 의미한다. 이러한 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성된다. ✨ 스레드란?프..
[Philosophers] 1. Subject 이해와 허용 함수 정리
·
42Seoul
식사하는 철학자들 🍝한 명 이상의 철학자들이 원탁에 둘러앉아 있다. 원탁에 큰 그릇의 스파게티와 철학자 수만큼의 포크가 있다.철학자들은 항상 먹기, 잠자기, 생각하기 중 하나의 상태를 가진다.철학자가 스파게티를 먹으려면, 양손에 포크를 들어야 한다.철학자가 식사를 마치면, 포크를 내려놓고 잠을 잔다.철학자가 잠에서 깨어나면, 생각을 하기 시작한다.철학자가 굶어 죽으면 시뮬레이션이 중단된다.철학자들은 서로 이야기할 수 없다. 과제 규칙전역 변수 금지프로그램 인자: number_of_philosophers time_to_die time_to_eat time_to_sleep [number_of_times_each_philosopher_must_eat]number_of_philosophers : 철학자와 포크..
noeyiz
'42Seoul' 카테고리의 글 목록