Exemplo n.º 1
0
 /// <summary>
 /// 释放列表
 /// </summary>
 /// <param name="value"></param>
 private void disposeLink(valueType value)
 {
     do
     {
         value.Dispose();
     }while ((value = value.NextTask) != null);
 }
Exemplo n.º 2
0
            internal int PushNotNull(valueType value)
            {
                if (count >= maxCount)
                {
                    value.Dispose();
                    return(0);
                }
                System.Threading.Interlocked.Increment(ref count);
                valueType headValue;

                do
                {
                    if ((headValue = head) == null)
                    {
                        value.NextTask = null;
                        if (System.Threading.Interlocked.CompareExchange(ref head, value, null) == null)
                        {
                            return(1);
                        }
                    }
                    else
                    {
                        value.NextTask = headValue;
                        if (System.Threading.Interlocked.CompareExchange(ref head, value, headValue) == headValue)
                        {
                            return(1);
                        }
                    }
                    AutoCSer.Threading.ThreadYield.Yield(AutoCSer.Threading.ThreadYield.Type.YieldLinkPush);
                }while (true);
            }