2010-01-14 4 views
2

스레드와 클래스 인스턴스 모두에 로컬 인 변수를 구현하는 플랫폼에 구애받지 않는 좋은 방법이 있습니까? 즉, T 개의 스레드와 I 클래스 인스턴스가있는 경우 해당 변수의 TxI 인스턴스가 있습니까? 나는 D 프로그래밍 언어, 버전 2를 사용하고 있지만, 좋은 언어와 무관 한 대답도 유용 할 것입니다.스레드 로컬, 클래스 인스턴스 로컬 저장소?

  1. 동기화를 요구해서는 안 :

    는 여기에 몇 가지 제약 조건입니다. 이것은 스레드 변수를 멤버 변수로 변수 참조에 매핑하는 해시 테이블을 갖는 것을 배제합니다.

  2. 주변에서 가비지 수집해야하는 참조를 유지하면 안됩니다. 이것은 클래스 인스턴스에 의해 인덱싱 된 스레드 로컬, 정적 해시 테이블을 갖는 것을 배제합니다.
  3. 효율을 높이려면 초기화가 지연되어야합니다. 스레드가 주어진 인스턴스의 변수에 액세스하지 못하면 절대로 만들어서는 안됩니다.
+0

D2에 암시적인 스레드 로컬 저장소가 있습니까? D1에는 __thread와 Tango/druntime의 TLS 구현 IIRC가 있습니다. –

+0

D2에는 전역 및 정적 변수에 대해서만 암시 적 스레드 로컬이 있습니다. – dsimcha

+0

술취한 TLS는 어떨까요? 동적으로 할당 할 수 있습니까? –

답변

2

가비지 수집해야하는 주위를 참조하지 않아야합니다. 이것은 클래스 인스턴스에 의해 인덱싱 된 스레드 로컬, 정적 해시 테이블을 갖는 것을 배제합니다.

약한 참조 키가있는 해시 테이블을 사용하십시오. 가비지 수집을 방지하지 않으며 키 (클래스 인스턴스)가 수집 될 때 해시 테이블에서 정보를 삭제합니다.

+0

D에 약한 참조가 없다는 점을 제외하고는 괜찮은 아이디어. – dsimcha

+0

파이널 라이저가 있습니까? –

+0

@Anon : 예, D에는 파이널 라이저가 있습니다. – dsimcha

관련 문제