2011-09-16 6 views
3

사용자 수준의 스레드 라이브러리를 구현하려고합니다. Getcontext 함수는 현재 스레드의 컨텍스트를 메모리에 저장하는 데 사용됩니다. 이 함수는 getContext는 Getcontext 함수에 대한 질문

는하지만, 두 경우 모두,이 같은 값을 반환하는 새로운 컨텍스트를 만들려면 현재 컨텍스트를 저장하고 다음 스레드

  • 로 이동 2의 경우

    1. 에 사용됩니다 . 그렇다면이 2 가지 경우를 어떻게 구별합니까?

      감사

  • 답변

    9

    는 getContext가) (새 스레드, setcontext()와 swapcontext로 이동하지 않습니다 않습니다. 스레드 라이브러리는 적어도이 두 기능을 구현해야합니다 새 스레드를 만들 수

    1. 능력을.

    2. 다른 스레드로 전환 할 수 있습니다.

    는 첫 번째 경우, 그러면 시작 기능 컨텍스트를 초기화은 makecontext() 호출하는 ucontext_t 초기화 스택 메모리를 할당하고 ucontext_t에 스택 포인터를 설정()는 getContext 전화 .

    두 번째 경우 getcontext()를 호출하여 현재 스레드의 컨텍스트를 저장하고 setcontext()를 사용하여 이전에 저장 한 다른 스레드로 전환합니다. 또는 더 일반적으로 swapcontext를 사용하면 get/setcontext 호출을 결합 할 수 있습니다. 예 : here은 get/setcontext를 사용하여 협력 스레드를 구현하는 매우 간단한 방법입니다.

    +0

    감사합니다 .--). 나는 또 다른 질문이있다. getcontext, setcontext, makecontext 및 swapcontext 함수에 신호 안전 문제가 있습니까? 있다면, 정확히 무슨 일이 일어날 지 설명 할 수 있습니까? – CuriousCoder

    +0

    음, http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html에 따르면 이러한 기능은 신호에 안전하지 않습니다. 즉, 신호 처리에서 사용할 수 없다는 의미입니다. 당신이 그렇게하면 어떻게되는지, 추측하기에 무의미합니다. – nos