https://80000coding.notion.site/Unix-Signal-Safety-1a51ce3ca0c0460488b50234526754bc
2023.12.16 수정
GPT의 답변 중 뮤텍스와 관련된 내용을 취소선 처리했습니다. 공유자원을 사용하는 것 자체가 재진입성과는 반대되는 효과를 가져오며, 설령 공유 자원을 사용한다고 해도 뮤텍스 등의 lock을 사용해서는 안됩니다. 만약 lock을 확보한 핸들러 스레드가 다른 시그널에 의해 interrupt된다면 lock이 해제되지 않으면서 deadlock 상태에 놓이게 될 것입니다.
thread-safety와 async-signal-safety는 별개의 개념입니다. 예시로 든 printf 함수의 경우에도 MT-SAFE한 함수이지만, signal-safe하지 않습니다. thread-safe한 함수는 공유 자원을 여러 스레드가 동시에 사용하면서 발생할 수 있는 race-condition을 막는 것을 최우선 과제로 하지만, signal-safe한 함수는 언제든지 interrupt될 수 있다는 특성 때문에 side effect를 최소화하는 것이 그 무엇보다 중요합니다.
hallucination 무섭네요. 저는 분명 signal-safety와 관련된 reentrancy와 atomicity에 대해 물어봤는데, 답변에는 thread-safety와 signal-safety가 섞여서 나왔습니다. GPT에게 물어본 후에는 반드시 교차 검증하는 것이 필요하겠습니다..
'CS > Unix, Linux' 카테고리의 다른 글
[linux] fork 그만, systemd를 이용해 데몬 생성하기 (1) | 2023.11.25 |
---|---|
Unix manpage 작성법 (0) | 2023.11.07 |