2
A
답변
4
정적 멤버 함수는 reentrancy와 관련하여 네임 스페이스 범위 함수 (또는 멤버 함수)와 다르지 않습니다. 그것들은 어떤 방식으로도 사용하기 쉽지는 않으며, 함수가 내부에서 무엇을하는지에 전적으로 의존합니다. 다음과 같이 재입 대한
3
규칙은 Wikipedia article on Reentrancy에 배치됩니다
- 재진입 코드는 정적 (또는 글로벌) 상수가 아닌 데이터를 보유하지 않을 수 있습니다.
- 재진입 코드는 자체 코드를 수정할 수 없습니다.
- 재진입 코드는 재진입 불가능한 컴퓨터 프로그램이나 루틴을 호출 할 수 없습니다.
멤버 함수가 이러한 규칙을 따르는 한 괜찮습니다.
내가 느끼는이 기사 Use reentrant functions for safer signal handling은 약간 더 desciption을 제공합니다
재진입 함수가 동시에 데이터 손상의 두려움없이 하나 이상의 작업 사용할 수 있습니다 하나입니다. 반대로, 비 재진입 기능은 세마포어를 사용하거나 코드 중 중요한 부분에서 인터럽트를 사용하지 않음으로써 기능에 대한 상호 배타가 보장되지 않으면 하나 이상의 작업에서 공유 할 수없는 기능입니다. 재진입 기능은 언제든지 중단 될 수 있으며 나중에 데이터를 손실하지 않고 을 재개 할 수 있습니다. 재진입 함수 은 전역 변수 이 사용될 때 로컬 변수를 사용하거나 데이터를 보호합니다.
재진입 기능 :
- 는 정적 데이터에 대한 포인터를 반환하지 않습니다
- 연속 호출을 통해 정적 데이터를 보유하지 않는다; 모든 데이터가
- 가 로컬 데이터를 사용하거나의 로컬 복사본을 만들어 글로벌 데이터의 보호를 보장 함수의 호출에 의해 제공됩니다
- 비 재진입 기능
다음을 호출하지합니다 기사가 완전히 나오기 전에 스레드 안전성과 어떻게 다른지 설명합니다.
0
정적 멤버 함수에 자동 변수 만 있으면 재진입 가능하다고 생각할 수 있습니다.
관련 문제
- 1. 정적 constexpr 멤버 함수는 다음의 코드는
- 2. TTimer.OnTimer 이벤트 처리기가 재진입입니까?
- 3. 정적 멤버 함수는 비 정적 멤버 변수를 수정할 수 없으므로 왜 여전히 사용해야합니까?
- 4. 비 정적 멤버 함수는 정적 멤버 함수 또는 데이터에 액세스 할 수 있습니까?
- 5. 정적 멤버 함수
- 6. 오류 호출 멤버 함수는
- 7. 멤버 함수는 기본적으로 가상입니다
- 8. 멤버 함수는 어디에 저장됩니까?
- 9. 정적 라이브러리의 정적 멤버
- 10. 정적 멤버
- 11. 정적 멤버
- 12. 정적 멤버 vs 정적 로컬 멤버 vs 로컬 멤버
- 13. main() 함수가 재진입입니까?
- 14. Boost.Bind 비 정적 멤버
- 15. 비 멤버 함수는 이력서 - 예선
- 16. std :: wstring_convert의 멤버 함수는 안전합니까?
- 17. 정적 멤버 vs 정적 전역
- 18. C++ 정적 함수는 없습니다.
- 19. 정적 멤버 함수 포인터가 아닌 정적 멤버 함수를 보유하려면
- 20. C++ : 비 멤버 함수와 정적 멤버 함수의 차이점은 무엇입니까?
- 21. 개체 정적 멤버 초기화
- 22. 헤더에서 정적 멤버 제거
- 23. 정적 멤버 함수 의미론
- 24. C++ 클래스의 정적 멤버
- 25. 인스턴스 클래스의 정적 멤버
- 26. 정적 변수 대 멤버
- 27. Java의 정적 멤버
- 28. 정적 멤버 변수 수출
- 29. 글로벌 클래스의 정적 멤버
- 30. 정적 멤버 함수 상속
아니요. 아무 것도 할 수 없습니다. – arx
다릅니다. 다른 변수/기능은 터치하거나 전화를 겁니다. globals 등 – Niall
수 있지만 반드시 수 있습니다. 다른 비진 출 코드를 호출하면 어떻게 될까요? 정적 멤버 변수를 수정하는 경우 (함수 자체에 정의되지 않은 경우)? –