세마포어는 18-4에서 다룬 뮤텍스와 유사합니다. 여기서는 0과 1만을 사용하는 바이너리 세마포어라는 것을 대상으로 쓰레드의 실행순서 컨트롤 중심의 동기화를 다룹니다. #include int sem_init(sem_t *sem, int pshared, unsigned int value); int sem_destroy(sem_t *sem); //success:0 fail:0 이외의 값 위 두 함수는 세마포어의 생성 및 소멸에 관한 함수입니다. sem에는 세마포어의 참조 값 저장을 위한 변수의 주소 값 전달(소멸 시에는 소멸시키려는 세마포어의 참조 값을 저장하고 있는 변수의 주소 값 전달), pshared에는 0 전달 시 하나의 프로세스 내에서 접근 가능, 0 이외의 값 전달 시 둘 이상의 프로세스에 의해 ..
동기화
둘 이상의 쓰레드를 생성할 때, 둘 이상의 쓰레드가 동시에 호출하면 문제를 일으키는 문장의 영역을 임계영역이라 합니다. 따라서 함수는 임계영역과 관련해서 두 종류로 나뉘어집니다. 쓰레드에 안전한 함수(Thread-safe Function) 쓰레드에 불안전한 함수(Thread-unsafe Function) 쓰레드에 안전한 함수에도 임계영역이 있을 수 있는데, 둘 이상의 쓰레드가 동시에 접근해도 문제를 일으키지 않도록 적절한 조치가 이뤄졌기에 안전한 것입니다. 다행히 기본적으로 제공되는 대부분의 표준함수는 쓰레드에 안전하고, 쓰레드에 불안전한 함수는 안전한 형태로 재 구현된 함수가 존재하며 쓰레드와 안전한 함수와 불안전한 함수의 구분을 직접할 필요는 없습니다. 헤더파일 선언 이전에 매크로 _REENTRANT..