天下之事,必先处之难,而后易之。

C# Dictionary多线程安全访问问题

Dictionary是非线程安全的类型,操作的时候需要对其进行线程安全处理,最简单的方式就是加锁(lock)。

数据变量:

private static Dictionary<string, VirtualVideoChannel> m_list_video_channel_all = new Dictionary<string, VirtualVideoChannel>();

加锁代码:

        /// <summary>
        /// 创建设备通道连接
        /// </summary>
        /// <param name="sim"></param>
        private void CreateNewChannelConnection(string sim)
        {
            var m_tcp_order = new Network.TCPChannel(txtServer.Text.Trim(), Convert.ToInt32(numPort.Value));
            // 设置Tag为SIM卡号
            m_tcp_order.Tag = sim;
            m_tcp_order.DataReceive = Receive;
            m_tcp_order.DataSend = DataSend;
            m_tcp_order.ChannelConnect += channel_ChannelConnect;
            m_tcp_order.Connect();
            // 映射SIM号和连接对象
            lock (m_sim_dictionary)
            {
                if (m_sim_dictionary.ContainsKey(sim))
                {
                    TCPChannel tcpChannel;
                    m_sim_dictionary.TryGetValue(sim, out tcpChannel);
                    if (tcpChannel != null)
                    {
                        tcpChannel.Close();
                        m_sim_dictionary.Remove(sim);
                    }
                }
                m_sim_dictionary.Add(sim, m_tcp_order);
            }
        }
同样的,List也不是线程安全的,同样都需要如此处理,当然可以换成别的方式来做。
posted @ 2024-09-04 10:42  boonya  阅读(74)  评论(0)    收藏  举报  来源
我有佳人隔窗而居,今有伊人明月之畔。
轻歌柔情冰壶之浣,涓涓清流梦入云端。
美人如娇温雅悠婉,目遇赏阅适而自欣。
百草层叠疏而有致,此情此思怀彼佳人。
念所思之唯心叩之,踽踽彳亍寤寐思之。
行云如风逝而复归,佳人一去莫知可回?
深闺冷瘦独自徘徊,处处明灯影还如只。
推窗见月疑是归人,阑珊灯火托手思忖。
庐居闲客而好品茗,斟茶徐徐漫漫生烟。

我有佳人在水之畔,瓮载渔舟浣纱归还。
明月相照月色还低,浅近芦苇深深如钿。
庐山秋月如美人衣,画堂春阁香气靡靡。
秋意幽笃残粉摇曳,轻轻如诉画中蝴蝶。
泾水潺潺取尔浇园,暮色黄昏如沐佳人。
青丝撩弄长裙翩翩,彩蝶飞舞执子手腕。
香带丝缕缓缓在肩,柔美体肤寸寸爱怜。
如水之殇美玉成欢,我有佳人清新如兰。
伊人在水我在一边,远远相望不可亵玩。