2013-07-10 1 views
0

평범한 오래된 c를 사용하고 있습니다.재진입 불가능 함수 재진입

정적 로컬 변수를 사용하는 함수가 있기 때문에 재 호출 할 수 없습니다. 정적 인 지역의 사용을 제거하고 함수를 재진입 성으로 만들고 싶습니다.

방법에 대한 팁이나 권장 사항은 무엇인가요?

이 질문은 너무 막연한가요? 현재 작업중인 디자인에 대한 자세한 내용이 필요합니까? 아니면 이러한 상황에서 따라야 할 일반적인 디자인 패턴이 있습니까?

+0

일반적으로 기존 기능에는 사용할 수 없으므로 다른 인터페이스로 새 기능을 만들어야합니다. 'strtok()'와'strtok_r()'의 차이점을 보자. – Barmar

+0

* 현재 작업하고있는 디자인에 대한 자세한 정보가 필요합니까? * 예, 자세한 내용이 필요합니다. – 0decimal0

+0

이 게시물을보십시오 : http : //stackoverflow.com/questions/261311/what-is-the-difference-between-reententfunction-and-recursive-function-in-c – 0decimal0

답변

1

상태를 유지하기 위해 정적 로컬을 사용하는 대신 발신자가 해당 상태 변수를 매개 변수로 함수에 전달하게합니다. 그것은 당신의 발신자가 주를 유지해야한다는 것을 의미하지만, 그것은 당신이 어쨌든 원하는 것입니다.

0

이 솔루션 중 하나를 사용하여 코드를 보호 할 수 있습니다 :

  1. 사용 뮤텍스 정적 변수 또는 세마포어.
  2. 기능을 사용하기 전에 인터럽트를 비활성화하고 완료 후 활성화하십시오.
  3. 멀티 태스킹 시스템의 예약을 비활성화합니다.
  4. 로컬 변수를 사용하십시오.