• c#线程基础之原子操作


    使用System.Threading.Interlocked类可以提高线程的安全性,具体资料参考msdn: http://msdn.microsoft.com/zh-cn/library/system.threading.interlocked.aspx 一般情况下,在子线程内使用i++这样的方式访问全局变量的方式是不安全的做法。测试下面的代码,在test1中经过100次number++,number并没有每次从0变为100,而test2则没有问题。

    using System;
    
    using System.Windows.Forms;
    
    namespace WindowsApplication32
    
    {
    
        public partial class Form1 : Form
    
        {
    
            public Form1()
    
            {
    
                InitializeComponent();
    
            }
    
            int number = 0;
    
    
    
            /// <summary>
    
            /// 普通的变量访问方式
    
            /// </summary>
    
            private void test1()
    
            {
    
                for (int m = 0; m < 10; m++)
    
                {
    
                    number++;
    
                    System.Threading.Thread.Sleep(100);
    
                }
    
                Console.WriteLine(number);
    
            }
    
            private void button1_Click(object sender, EventArgs e)
    
            {
    
                number = 0;
    
                for (int i = 0; i < 10; i++)
    
                {
    
                    new System.Threading.Thread(test1).Start();
    
                }
    
            }
    
            /// <summary>
    
            /// 使用原子的访问方式
    
            /// </summary>
    
            private void test2()
    
            {
    
                for (int m = 0; m < 10; m++)
    
                {
    
                    System.Threading.Interlocked.Increment(ref number);
    
                    System.Threading.Thread.Sleep(100);
    
                }
    
                Console.WriteLine(number);
    
            }
    
            private void button2_Click(object sender, EventArgs e)
    
            {
    
                number = 0;
    
                for (int i = 0; i < 10; i++)
    
                {
    
                    new System.Threading.Thread(test2).Start();
    
                }
    
            }
    
        }
    
    }
    
    
  • 相关阅读:
    抓老鼠
    我的寒假作业
    寒假作业
    大一上学期C语言学习总结
    我的三位老师
    自我介绍
    2019春季第七周作业
    第六周总结
    第五周作业及其总结
    2019春季第四周作业
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6204924.html
Copyright © 2020-2023  润新知