2014-10-01 6 views
2

마찬가지로 제목 :정적 멤버 함수는 재진입입니까?

그 자체로 정적 변수가없는 정적 멤버 함수가있는 클래스가있는 경우 멤버 함수를 재진입 성으로 생각할 수 있습니까?

+0

아니요. 아무 것도 할 수 없습니다. – arx

+0

다릅니다. 다른 변수/기능은 터치하거나 전화를 겁니다. globals 등 – Niall

+0

수 있지만 반드시 수 있습니다. 다른 비진 출 코드를 호출하면 어떻게 될까요? 정적 멤버 변수를 수정하는 경우 (함수 자체에 정의되지 않은 경우)? –

답변

4

정적 멤버 함수는 reentrancy와 관련하여 네임 스페이스 범위 함수 (또는 멤버 함수)와 다르지 않습니다. 그것들은 어떤 방식으로도 사용하기 쉽지는 않으며, 함수가 내부에서 무엇을하는지에 전적으로 의존합니다. 다음과 같이 재입 대한

3

규칙은 Wikipedia article on Reentrancy에 배치됩니다

  • 재진입 코드는 정적 (또는 글로벌) 상수가 아닌 데이터를 보유하지 않을 수 있습니다.
  • 재진입 코드는 자체 코드를 수정할 수 없습니다.
  • 재진입 코드는 재진입 불가능한 컴퓨터 프로그램이나 루틴을 호출 할 수 없습니다.

멤버 함수가 이러한 규칙을 따르는 한 괜찮습니다.

내가 느끼는이 기사 Use reentrant functions for safer signal handling은 약간 더 desciption을 제공합니다

재진입 함수가 동시에 데이터 손상의 두려움없이 하나 이상의 작업 사용할 수 있습니다 하나입니다. 반대로, 비 재진입 기능은 세마포어를 사용하거나 코드 중 중요한 부분에서 인터럽트를 사용하지 않음으로써 기능에 대한 상호 배타가 보장되지 않으면 하나 이상의 작업에서 공유 할 수없는 기능입니다. 재진입 기능은 언제든지 중단 될 수 있으며 나중에 데이터를 손실하지 않고 을 재개 할 수 있습니다. 재진입 함수 은 전역 변수 이 사용될 때 로컬 변수를 사용하거나 데이터를 보호합니다.

재진입 기능 :

  • 는 정적 데이터에 대한 포인터를 반환하지 않습니다
  • 연속 호출을 통해 정적 데이터를 보유하지 않는다; 모든 데이터가
  • 가 로컬 데이터를 사용하거나의 로컬 복사본을 만들어 글로벌 데이터의 보호를 보장 함수의 호출에 의해 제공됩니다
  • 비 재진입 기능

다음을 호출하지합니다 기사가 완전히 나오기 전에 스레드 안전성과 어떻게 다른지 설명합니다.

0

정적 멤버 함수에 자동 변수 만 있으면 재진입 가능하다고 생각할 수 있습니다.