2012-09-12 2 views
4

내가 묻는 플랫폼은 Linux입니다. 내가 말하는 스레드 로컬 저장소는 pthread_xxx 또는 __thread (gcc)입니다.ucontext 및 스레드 로컬 저장소

내 프로그램에서 ucontext 항목 (예 : makecontext, swapcontext 등)을 사용하려고합니다. 그래서 내 질문은 어떻게 스레드 로컬 저장소와 함께 작동합니까? 더 구체적으로 말하면, swapcontext 또는 setcontext를 사용하여 다른 광섬유로 전환하면 스레드 로컬 저장소가 변경되거나 스레드 로컬 저장소가 컨텍스트의 일부가 아닌 것입니까?

또 다른 질문 : TLS가 setcontext/swapcontext에 의해 변경되는 경우 문맥을 어떻게 변경 하든지 관계없이 스레드에 고정 될 내용이 있습니까? 다른 한편, TLS가 컨텍스트에 충실 할 경우, thread에 집착하고 setcontext/swapcontext에 의해 변경되지 않는 것이 있습니까?

http://en.wikipedia.org/wiki/Fiber_(computer_science)에 따르면 Windows 플랫폼에는 스레드 로컬 저장소와 광 섬유 로컬 저장소가 있습니다.

답변

2

스레드 로컬 저장소가 setcontext/swapcontext와 상호 작용하는 방식은 잘 지정되어 있지 않습니다. 또한 swapcontext() around pthreads

관련이에 대한 몇 가지 생각이 있습니다 : -

리눅스에

, 스레드 로컬 저장소를 setcontext/swapcontext에 의해 영향을받는 일부 소프트웨어는 그 행동에 의존하지 않는 더 통찰력는 NetBSD 메일 링리스트에 최근의 설명을 참조 C++에서의 병렬 처리와 TLS의 상호 작용 : TLS_and_Parallelism.pdf

편집 : 그것은 또한 일부 시간 동안 쓸모 표시된대로되는 The Open Group 기본 사양 7 호에서 제거되었는지은 makecontext/swapcontext을 지적 가치가있다. 대안으로, Boost.Context이 최근 Boost 라이브러리에 추가되었습니다 (광섬유 로컬 저장 장치를 지원하지는 않지만).

+0

감사합니다. TLS가 Linux의 컨텍스트 변경에 영향을받지 않는지 확인했습니다. 그래서 제 질문은 리눅스에 파이버 - 로컬 스토리지가 있습니까? –

+0

아니요, 없습니다. – cmeerw

관련 문제