Skip to content

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:

Preliminary: | MT-Safe | AS-Safe | AC-Safe |

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

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

위에서 설명한 안전 컨텍스트 내에서 호출하는 것이 안전하지 않습니다. 이러한 컨텍스트 내에서 호출하면 정의되지 않은 동작이 호출됩니다.

안전 컨텍스트에서 안전하다고 명시적으로 문서화되지 않은 기능은 안전하지 않은 것으로 간주해야 합니다.

See also

Favorite site