localtime_r gettime_r 리눅스 시스템 API 함수를 보면 기본함수와 기본함수에 _r을 붙인 2가지 함수를 모두 제공하는 경우가 있다. 이때 _r 함수는 thread_safe 하다고 말한다. 이 함수들은 내부적으로 critical section 에러발생에 대한 가능성을 배제해준다. 따라서 스레드 내부에서 이 함수를 호출할 때는 mutex 혹은 세마포어를 할 필요가 없다
blocking 모드는 API 호출 이후 실행 혹은 대기를 하는 operation non-blocking 모드는 API 호출 이후 대기 없이 실행 혹은 종료를 하는 operation API의 기본 모드는 blocking으로 동작한다 만일 read API로 읽을 fd가 2개 이상 읽을 때 non-blocking으로는 모두 확실히 읽을 수 있지만 blocking으로 읽을 땐 확신할 수 없다 non-blocking 모드 설정 방법 ex) open 1. open() 호출 시 O_NONBLOCK 설정 2. open() 호출 이후 fnctl()을 이용해 O_NONBLOCK 설정/해제 ** 참고 non-blocking IO vs async IO non-blocking IO는 성공여부에 관계없이 결과값을 즉시 반환하며..
signum 9번으로 프로세스의 응답 상관없이 바로 종료시키는 시그널이다 SIGKILL은 API로 설정할 수 있는 무시, 처리가 모두 불가능하다 1. signal(SIGKILL, SIGIGN) 2. signal(SIGKILL, (void *)sigkill_handler) 모두 불가능
공유변수를 읽어오고 나서 처리되지 않고, 다른 스레드에서 해당 변수를 호출하면 꼬이게 된다. 따라서 mutex를 써서 동기화에 신경써야만 한다
$ sudo apt-get install manpages-posix manpages-posix-dev
재진입성이란 프로세스 환경에서 중요하게 다뤄지는 성질이다. 시그널 발생으로 인한 핸들러 루틴을 처리하거나 멀티쓰레드 환경이라면 다른 쓰레드로 제어권이 넘어갈 때 논할 수 있다. 재진입성의 성질은 실행의 권한이 넘어가고 재개되었을 때 정상적으로 수행이 될 수 있는 함수를 말한다.