2013-10-19 3 views
0
int swapcontext(ucontext_t *oucp, ucontext_t *ucp); 
int getcontext(ucontext_t *ucp); 
int setcontext(const ucontext_t *ucp); 

이해가 정확하다면 swapcontext는 먼저 oucp에서 getcontext를 호출 한 다음 ucp에서 setcontext를 호출하는 것과 같습니다. getcontext 및 setcontext를 사용하여 swapcontext를 구현하는 방법을 알아 보려고합니다.swcontcontext를 getcontext 및 setcontext로 구현하기

int swapcontext(ucontext_t *oucp, ucontext_t *ucp) 
{ 
    getcontext(oucp); 
    setcontext(ucp); 
} 

문제는 oucp의 내용이 잘못된 줄 것을, 나는 다음 줄이 setcontext 후 라인 (UCP)이되도록하는 방법으로는 getContext 호출 할 수 있습니다. 그러나 setcontext가 반환되지 않으므로 그렇게 할 수 없습니다. 또한, 만약 내가 이런 식으로 swapcontext를 구현한다면, 나는 oucp와 ucp에 같은 인수를 건네면 나는 갇혀있을 것이다.

이 두 함수를 사용하여 swapcontext를 구현하는 방법은 무엇입니까? 아니면 불가능한가요?

+0

코드를 추가하십시오. – yulian

+0

@ JulianKhlevnoy 위의 세 함수는 ucontext 헤더의 일부입니다. –

+0

이 정보를 제공 할 수 없습니다. 다른 사용자가 귀하를 도울 수 있도록 자세한 정보를 설명하십시오. – yulian

답변

1

여기 한 가지 방법이 있습니다. 두 번째로 getcontext()이 반환되도록 setcontext()이 처음 호출 될 때 부울 변수를 설정하는 것이 좋습니다. setcontext() 호출을 건너 뛸 수 있습니다.

int swapcontext(ucontext_t *oucp, ucontext_t *ucp) { 
    volatile bool swapped = false; 
    int result = getcontext(oucp); 
    if (result == 0 && !swapped) { 
     swapped = true; 
     result = setcontext(ucp); 
    } 

    return result; 
}