2010-02-17 4 views
8

재진입 기능과 스레드 안전 기능의 차이점은 무엇입니까?재진입 기능과 스레드 안전 기능의 차이점

+1

에 http : // 유래.co.kr/questions/2274254/어떤 종류의 코드를 다시 입력 할 수있는/2274289 # 2274289 –

+0

동일하지 않은 경우 매우 유사 함 : http://stackoverflow.com/questions/856823/threadsafe-vs- 재진입시 –

답변

1

wiki article on the subject을 확인 했습니까? 그것은 그것을 잘 설명하므로 자세한 내용은 그것을 참조하십시오. 문서로부터

몇몇 중요한 비트 : 컴퓨팅

는 컴퓨터 프로그램 또는 서브 루틴은 그것의 실행의 중간에 중단 될 수 있는지 재진입라고하고 안전하게 ("재 다시 호출 될 -entered ") 이전 호출이 완료되기 전에 호출됩니다. 인터럽트는 점프 또는 통화와 같은 내부 조치 또는 하드웨어 인터럽트 또는 신호와 같은 외부 조치로 인해 발생할 수 있습니다. 재 호출 된 호출이 완료되면 이전 호출이 올바른 실행을 다시 시작합니다.

재진입이 정의는 멀티 스레드 환경에서 스레드 안전성과는 다르다. 재진입 서브 루틴은 스레드 안전성을 달성 할 수 있지만 재진입만으로는 모든 상황에서 스레드 안전성이 충분하지 않을 수도 있습니다. 반대로 스레드 안전 코드는 반드시 재진입 가능하지 않아도됩니다 (예제는 아래 참조).

+4

추운 날을 대비하여 링크를 요약 한 실제 답변을 게시하십시오 (현재와 현재). – nedR

2

재진입은 전역 상태가 없음을 의미합니다 (로컬에만 해당).

스레드 안전성은 2 개 이상의 스레드가 (충돌하는 값을 쓰는 방식으로) 서로 충돌하지 않음을 의미합니다.

+0

브라이언이 말했듯이, 위키 문서는 그것을 잘 설명해줍니다 ... –

2
  • 공유 데이터에 대한 모든 참조가 직렬화이기 때문에 호출은, 공유 데이터를 사용하는 경우에도 여러 스레드에서 동시에 호출 할 수있는 스레드 안전 기능.

  • 재진입 함수 수 여러 스레드에서 동시에 호출하지만, 각 호출이 자신의 데이터를 사용하는 경우에만 할 수.

따라서, 스레드 안전 기능은 항상 재진입이지만, 재진입 함수는 항상 스레드 안전하지 않습니다. 멤버 함수는 다중 스레드로부터 안전하게 이라고 할 수있는 경우 각각의 스레드가 다른 사용으로하는 클래스라고

차이가 예제에 쓸데 수

는 긴 재진입 될 클래스의 인스턴스입니다. 모든 스레드가 동일한 클래스 인스턴스를 사용하는 경우에도 해당 멤버 함수가 여러 스레드에서 안전하게 호출 될 수 있으면 클래스는 스레드로부터 안전합니다.

출처 : Qt