zoukankan      html  css  js  c++  java
  • 轮询算法

           static void Test9()
            {
                var strs = new List<string>
                {
                    "192.168.100.125",
                    "192.168.100.126",
                    "192.168.100.127",
                    "192.168.100.128",
                    "192.168.100.130",
                    "192.168.100.131"
                };
    
                var addressEntry = new AddressEntry(strs);
                var item = addressEntry.GetAddress();
            }
    
            protected class AddressEntry
            {
                #region Field
    
                private int _index;
                private int _lock;
                private readonly int _maxIndex;
                private readonly string[] _address;
    
                #endregion Field
    
                #region Constructor
    
                public AddressEntry(IEnumerable<string> address)
                {
                    _address = address.ToArray();
                    _maxIndex = _address.Length - 1;
                }
    
                #endregion Constructor
    
                #region Public Method
    
                public string GetAddress()
                {
                    while (true)
                    {
                        //如果无法得到锁则等待
                        if (Interlocked.Exchange(ref _lock, 1) != 0)
                        {
                            default(SpinWait).SpinOnce();
                            continue;
                        }
    
                        var address = _address[_index];
    
                        //设置为下一个
                        if (_maxIndex > _index)
                            _index++;
                        else
                            _index = 0;
    
                        //释放锁
                        Interlocked.Exchange(ref _lock, 0);
    
                        return address;
                    }
                }
    
                #endregion Public Method
            }
  • 相关阅读:
    法正(17):玄德
    法正(16):舌战
    法正(15):卢氏
    法正(14):寿星
    struts2笔记---struts2的执行过程
    Oracle数据库(一)
    flask的使用(一)
    struts2--笔记(一)
    docker基础(二)
    docker安装及问题处理
  • 原文地址:https://www.cnblogs.com/liuxiaoji/p/10319815.html
Copyright © 2011-2022 走看看