POSIX Safety Concepts
포직스 (POSIX)에서 정의하는 함수들의 안정성 정도를 나타내기 위한 단계.
Preliminary
This manual documents various safety properties of GNU C Library functions, in lines that follow their prototypes and look like:
The properties are assessed according to the criteria set forth in the POSIX standard for such safety contexts as Thread-, Async-Signal- and Async-Cancel- -Safety. Intuitive definitions of these properties, attempting to capture the meaning of the standard definitions, follow.
- MT-Safe or Thread-Safe functions are safe to call in the presence of other threads. MT, in MT-Safe, stands for Multi Thread.
- AS-Safe or Async-Signal-Safe functions are safe to call from asynchronous signal handlers. AS, in AS-Safe, stands for Asynchronous Signal.
- AC-Safe or Async-Cancel-Safe functions are safe to call when asynchronous cancellation is enabled. AC in AC-Safe stands for Asynchronous Cancellation.
- MT-Unsafe, AS-Unsafe, AC-Unsafe functions are not safe to call within the safety contexts described above. Calling them within such contexts invokes undefined behavior.
- Preliminary safety properties are documented, indicating these properties may not be counted on in future releases of the GNU C Library.
Thread-Safe functions
MT-Safe (Multi Thread)
메모리 동기기법등이 사용되지 않아 다중 쓰레드 환경에서 사용하여도 안전
MT-Safe라는 것은 함수가 원자적이라는 것을 의미하거나 POSIX가 사용자에게 노출하는 메모리 동기화 메커니즘을 사용한다는 것을 의미하지 않습니다. MT-Safe 함수를 순서대로 호출해도 MT-Safe 조합이 생성되지 않을 수도 있습니다. 예를 들어, 스레드가 두 개의 MT-Safe 함수를 차례로 호출하는 것은 다른 스레드의 동시 호출이 파괴적인 방식으로 방해할 수 있기 때문에 두 함수 조합의 원자 실행과 동일한 동작을 보장하지 않습니다.
라이브러리 인터페이스에서 함수를 인라인할 수 있는 전체 프로그램 최적화는 안전하지 않은 재정렬을 노출할 수 있으므로 GNU C 라이브러리 인터페이스에서 인라인을 수행하는 것은 권장되지 않습니다. 문서화된 MT-Safety 상태는 전체 프로그램 최적화에서 보장되지 않습니다. 그러나 사용자가 볼 수 있는 헤더에 정의된 함수는 인라인에 안전하도록 설계되었습니다.
Async-Signal-Safe functions
- (SP) async-signal safe :: 순간 기록
- Signal Handlers and Async-Signal Safety (Multithreaded Programming Guide)
- signal-safety(7) - Linux manual page
- Async-signal-safe functions(비동기 시그널 안전 함수)
AS-Safe (Asynchronous Signal)
비동기화 신호 처리함수에서 사용하여도 안전
AS-Safe인 많은 함수는 errno부동 소수점 환경을 설정하거나 수정할 수 있습니다. 그렇게 하면 신호 처리기에서 사용하기에 적합하지 않기 때문입니다. 그러나 비동기 신호 처리기가 이 스레드 로컬 상태를 수정하면 프로그램이 오작동할 수 있으며 신호 처리 기계는 이를 유지하기 위해 신뢰할 수 없습니다. errno따라서 부동 소수점 환경 을 설정하거나 수정할 수 있는 함수를 호출하는 신호 처리기는 원래 값을 저장하고 반환하기 전에 복원해야 합니다 .
Async-Cancel-Safe functions
AC-Safe (Asynchronous Cancellation)
비동기 철회(Cancellation)시에 호출되어도 안전
POSIX 표준은 AC-Safe가 되는 세 가지 기능, 즉 pthread_cancel, pthread_setcancelstate및 pthread_setcanceltype. 현재 GNU C 라이브러리는 이 세 가지 기능 이상을 보장하지 않지만 현재 AC-Safe 기능을 문서화합니다.
신호 처리기와 마찬가지로 취소 정리 루틴은 필요한 부동 소수점 환경을 구성해야 합니다. 루틴은 특히 비동기 취소가 활성화된 경우 부동 소수점 환경을 가정할 수 없습니다. 부동 소수점 환경의 구성을 원자적으로 수행할 수 없는 경우 발생한 환경이 내부적으로 일치하지 않을 수도 있습니다.
MT-Unsafe, AS-Unsafe, AC-Unsafe
위에서 설명한 안전 컨텍스트 내에서 호출하는 것이 안전하지 않습니다. 이러한 컨텍스트 내에서 호출하면 정의되지 않은 동작이 호출됩니다.
안전 컨텍스트에서 안전하다고 명시적으로 문서화되지 않은 기능은 안전하지 않은 것으로 간주해야 합니다.