Exemple #1
0
 static void DeinitThreadLocalVars()
 {
     // Notify thread-local variables of termination
     for (int i = 0; i < _TLVs.Count; i++)
     {
         ThreadLocalVariableBase v = _TLVs[i].Target();
         if (v != null)
         {
             v.Terminate(Thread.CurrentThread.ManagedThreadId);
         }
     }
 }
Exemple #2
0
 internal static void RegisterTLV(ThreadLocalVariableBase tlv)
 {
     lock (_TLVs) {
         for (int i = 0; i < _TLVs.Count; i++)
         {
             if (!_TLVs[i].IsAlive())
             {
                 _TLVs[i].SetTarget(tlv);
                 return;
             }
         }
         _TLVs.Add(new WeakReference <ThreadLocalVariableBase>(tlv));
     }
 }
Exemple #3
0
        static bool InheritThreadLocalVars(int parentThreadId)
        {
            int threadId;

            if (!_areThreadVarsInitialized && (threadId = Thread.CurrentThread.ManagedThreadId) != parentThreadId)
            {
                _areThreadVarsInitialized = true;
                for (int i = 0; i < _TLVs.Count; i++)
                {
                    ThreadLocalVariableBase v = _TLVs[i].Target();
                    if (v != null)
                    {
                        v.Propagate(parentThreadId, threadId);
                    }
                }
                return(true);
            }
            return(false);
        }