두 번째 스레드가 실행될 때 예외가 발생합니다. 이유를 설명 할 수 있습니까?스레드 로컬 저장소에 액세스
class TLS
{
public void Run()
{
lock (this)
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId + " started.");
LocalDataStoreSlot ldss = Thread.AllocateNamedDataSlot("unique"); // Exception
Thread.SetData(ldss, "some_data");
string a = Thread.GetData(ldss) as string;
Thread.Sleep(1000);
Console.WriteLine(Thread.CurrentThread.ManagedThreadId + " ended.");
}
}
}
예외 정보 :
at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add) at System.LocalDataStoreMgr.AllocateNamedDataSlot(String name) at ConsoleApplication2.TLS.Run() in AutoLock.cs:line 65 at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()
감사합니다.
TLS이면 각 스레드마다 고유하지 않아야합니다. 모든 스레드가 동일한 슬롯을 사용하는 이유는 무엇입니까? – Azodious
@Azodius : 당신이 그것을 두 번하고 있기 때문에. 한 번만 호출하면 해당 이름의 슬롯이 각 스레드에 할당됩니다. 연결된 MSDN 설명서를 읽으십시오. – ChrisWue
확인. 즉, 슬롯이 만들어지면 모든 스레드의 TLS에서 만들어집니다. – Azodious