내 질문에 왜 스레드 함수에서 로컬 변수 대신 TLS 메커니즘을 사용합니까? 몇 가지 좋은 예를 들려 주시겠습니까? 아니면 로컬 바 (local vars)보다 TLS의 장점은 무엇입니까? 감사합니다, Mateusz로컬 변수 대신 스레드 로컬 저장소 (TlsAlloc, TlsGetValue, ets)를 사용하는 이유
답변
TLS는 스레드와 관련된 사용자 세션 컨텍스트 정보와 같은 것들에 유용하지만 관련없는 다양한 방법에 사용될 수 있습니다. 이러한 상황에서 TLS는 정보를 호출 스택의 위아래로 전달하는 것보다 편리합니다.
스레드 로컬 저장소는 스레드 단위로 전역 변수 또는 정적 변수를 에뮬레이트하는 데 사용할 수 있습니다. "보통"로컬 변수는 사용할 수 없습니다.
그리고 스레드 별 전역 변수는 무엇입니까? –
그것은 f.e.를 줄 수있다. mishmashru가 스레드 함수에서 호출 된 많은 함수를 가지고있을 때 – str14821
지역 변수를 사용할 수 있다면 그렇게하고 지역 변수를 사용할 수 있습니다. 마지막 수단으로 전역 변수와 거의 동일한 단점을 겪고있는 스레드 로컬 저장소를 사용해야합니다. 스레드 로컬 저장소를 사용해야하는 이유를 찾고 있지만 사실 가장 좋은 방법은이를 방지 할 방법을 찾는 것입니다. 내가 TLS를 사용하여 하나의 아주 좋은 예를 알고 https://software.intel.com/en-us/articles/use-thread-local-storage-to-reduce-synchronization
다음은 동기화를 줄이기 위해 스레드 로컬 저장소를 사용하는 방법에 대한 인텔의 좋은 링크입니다. LIBC를 구현하거나 LIBC 변형 중 하나를 새 플랫폼에 이식 할 때 각 스레드마다 고유 한 'errno'변수 (단일 스레드 platfrom가 extern int errno 임)가 필요합니다. LIBC 함수는 단순히 현재 스레드의 TLS에 저장하고 errno를 호출하면 TLS에서 읽습니다. TLS는 모든 라이브러리 스레드를 안전하게 만드는 방법입니다. 다른 스레드에서 호출되는 동일한 함수가 다른 스레드의 '정적'또는 '전역'변수를 손상시키지 않도록 TLS에서 '정적'또는 '전역'데이터에 모든 종류를 저장합니다. 그러면 다른 스레드에서 함수가 다시 입력됩니다.
이 게시물을 건너 뛰었지만 나중에이 기사를 읽었습니다. 나쁜 움직임, 좋은 기사! – Seralize
- 1. 스레드 로컬 저장소 및 로컬 메서드 변수
- 2. 스레드 로컬, 클래스 인스턴스 로컬 저장소?
- 3. 스레드 로컬 저장소
- 4. 리눅스의 스레드 로컬 저장소 구현
- 5. .Net : 논리 스레드 및 스레드 로컬 저장소?
- 6. 스레드 로컬 저장소 (TLS)를 어떻게 사용합니까?
- 7. 하위 도메인의 로컬 저장소
- 8. 메서드를 사용하는 이유 로컬 추상 내부 클래스
- 9. Mercurial 로컬 저장소 백업
- 10. C++ 다중 스레드 안전 로컬 변수?
- 11. 로컬 서버 repo에 로컬 로컬 자식 저장소 가져 오기
- 12. Silverlight 로컬 저장소
- 13. CVS의 Maven 로컬 저장소?
- 14. 로컬 저장소에있는 svn 저장소
- 15. 스레드 로컬 스토리지에서라도
- 16. 스레드 로컬 저장소에 액세스
- 17. 개발을위한 로컬 LDAP 저장소 권장
- 18. C++의 사용자 공간에서 스레드 로컬 저장소를 에뮬레이션하는 방법은 무엇입니까?
- 19. 스레드 로컬 로컬 정적 변수를 정의하는 방법은 무엇입니까?
- 20. 정적 멤버 함수의 로컬 변수
- 21. InheritableThread 로컬 및 스레드 풀
- 22. Google 크롬 확장의 탭 당 로컬 저장소 변수 범위
- 23. Eclipse에서 로컬 SVN 저장소 관리
- 24. 로컬 R 패키지 저장소 만들기
- 25. 로컬 데이터베이스 저장소 기본 데이터
- 26. 자바 스크립트 + HTML5 로컬 저장소
- 27. HTML5 로컬 저장소 및 Chrome
- 28. EGit 로컬 저장소와 원격 저장소
- 29. 스레드 로컬 저장소 오버 헤드 피하기 (ffmpeg YADIF 확장 가능)
- 30. 로컬 변수 대 매개 변수
을 언급하고 그 모두가 같은 데이터를 사용하면 TLS를 사용하여 스택을 통해 데이터를 전달하지 않습니다. –
예. 예를 들어, 로그인 한 사용자를 알기 위해 코드의 여러 지점에서 필요한 경우 로그인 된 사용자를 모든 메서드에 전달하는 대신 해당 정보를 TLS에 저장하는 것이 더 쉽습니다. – btreat
이해가 정확하지만 스택의 구문 분석이 훨씬 우수합니다. –