2011-04-15 5 views
1

어떻게 boost :: thread를 사용하여 각 스레드가 자체 메모리 공간에서 실행되는 함수를 실행합니까? 따라서 함수에 새 변수를 할당하면 실행중인 스레드에서만 인스턴스로 존재합니다.boost :: thread 함수 실행

명백하게하기 위해 boost :: thread를 사용하여 같은 메서드를 실행하는 스레드를 생성하려고하지만 별도의 공간에서 실행하려고하는 잠금이나 세마포를 사용하고 싶지 않습니다.

답변

4

스레드 함수 내에 할당 한 것은 모두 static으로 선언되지 않은 한 해당 함수의 로컬 함수입니다. 코드를 정상적으로 작성하면 (static 로컬 변수를 피함) 괜찮을 것입니다.

3

자체 주소 공간에서 완전히 실행되는 스레드를 작성해야 할 경우, 스레드가 아닌 프로세스를 작성하는 것이 좋습니다. 스레드는 정의에 따라 상위 프로세스의 동일한 주소 공간에서 실행되는 실행 지점입니다.

스레드를 만들 필요가있는 경우 (즉, 스레드간에 메모리 및 기타 리소스가 공유되어 있음) 특정 스레드 전용 메모리가 있어야하는 경우 몇 가지 옵션이 있습니다. 1) as ildjarn 제안, 스레드 프로 시저가 로컬 (또는 동적 메모리) 할당 및 코드를 작성하여 각 스레드가 자체적으로 할당하는이 메모리를 사용하도록합니다. 2) TLS (스레드 로컬 저장소)를 살펴보십시오. 이것은 특정 스레드 전용의 "전역"변수를 생성 할 수있게 해주는 API입니다. 또한 C++에는 TLS를 사용하는 변수 선언을위한 내장 키워드가 있습니다.

위의 옵션에서는 스레드가 다른 스레드 메모리를 손상시킬 수없는 경우 자동 격리를 수행하지 않습니다. 이러한 격리를 얻는 유일한 방법은 여러 프로세스를 생성하거나 .NET 언어 중 하나로 전환하고 동일한 프로세스 내에서 실행되는 여러 AppDomain을 인스턴스화하는 것입니다.

관련 문제