`
csstome
  • 浏览: 1519783 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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# 高效线程安全,解决多线程写txt日志类

    但就目前的实现来看,它已经足够处理多线程环境下的日志写入需求,并且通过`lock`保证了操作的原子性。 在实际测试中,我们可以创建一个名为`TestConsoleApp`的控制台应用程序,生成多个线程并调用`...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例),可直接运行

    这些实例不仅覆盖了多线程的基础应用,还涉及到高级的并发控制和同步技术,对于理解和掌握C#.NET中的多线程编程有极大的帮助。通过分析和运行这些实例,开发者可以深入理解多线程在实际项目中的运用,提升解决问题的...

    C#多线程Demo

    在.NET框架中,C#语言提供了强大的多线程支持,使得开发者可以充分利用现代多核处理器的优势,提高程序的运行效率。本示例“C#多线程Demo”着重讲解了如何利用`System.Threading.Tasks.Parallel`类来实现并行处理。`...

    C#多线程介绍.rar

    7. **Interlocked类**:该类提供了原子操作,保证了多线程环境中的数据一致性,例如Interlocked.Increment和Interlocked.Decrement用于线程安全的计数。 8. **Thread.Join**:此方法用于等待特定线程结束。在调用...

    C#线程同步的几种方法

    这些方法内部实现了原子操作,确保即使在多线程环境下也能正确处理数据。 总结来说,C#中的线程同步方法各有其适用场景和限制。`volatile`适用于简单的数据一致性需求,`lock`提供了更全面的同步控制,而`System....

    c#多线程编程第二版[2016]

    - 原子操作:介绍如何在多线程中执行简单的原子操作,这些操作可以保证数据的一致性。 - 使用Mutex:Mutex是一种同步机制,可以用于保护对共享资源的互斥访问。 - 使用SemaphoreSlim、AutoResetEvent、...

    c#线程参考手册

    C#(读作“看井”)是微软...通过阅读这本书,开发者可以建立起坚实的多线程编程基础,并能够编写出高效的多线程应用程序。不过,在实际开发中,还需要关注最新的编程最佳实践和语言更新,以确保代码的现代性和安全性。

    c#多线程以及线程池的学习

    综上所述,理解和掌握C#中的多线程和线程池是开发高效应用程序的基础,通过合理利用这些特性,开发者可以构建出响应快速、资源利用合理的软件。在WinForms应用程序中,正确处理多线程与UI交互是保持良好用户体验的...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)

    在.NET框架中,C#语言提供了强大的多...这六个实例覆盖了多线程编程的核心概念,通过实际操作可以更深刻地理解多线程在C#.NET中的应用。在实际开发中,理解并熟练运用这些技术,能有效提高软件性能,解决复杂并发问题。

    c#多线程之生产者消费者

    这些数据结构在多线程环境下能保证操作的原子性,防止数据竞争。 4. **性能优化**:在实际应用中,我们需要考虑线程池的使用,避免频繁创建和销毁线程。此外,根据具体场景选择合适的同步机制,比如高并发情况下...

    C#线程参考手册中文版

    《C#线程参考手册中文版》是一本专为C#开发者设计的深入解析线程技术的书籍,尤其适合那些已经掌握了C#基础知识并希望进一步探索并发编程的开发者。Wrox出版社作为知名的IT图书出版商,其出版的书籍通常具有权威性和...

    C#多线程系列讲座(同步,死锁等知识)

    7. **线程安全的数据结构**:C#标准库提供了一些线程安全的数据结构,如`ConcurrentQueue`、`ConcurrentStack`、`ConcurrentDictionary`等,可以在多线程环境下安全地进行读写操作。 8. **线程优先级**:虽然可以...

    c#多线程 资料

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在C#这样的现代编程语言中。C#提供了丰富的多线程支持,使得开发者能够高效地利用多核处理器资源,提高程序的响应速度和整体性能。以下是一些关于C#多线程的...

    C#中使用Interlocked进行原子操作的技巧

    在多线程编程中,确保数据的一致性和正确性至关重要,而原子操作是实现这一目标的关键工具之一。C#中的`System.Threading.Interlocked`类提供了一系列的静态方法,用于执行线程安全的原子操作,避免了锁机制带来的...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)(十分经典)

    在.NET框架中,C#语言提供了强大的多线程支持,使得开发者可以充分利用现代多核处理器的优势,实现并行处理和高效编程。以下是对标题和描述中提到的C#.NET多线程实例进行的详细解析: 1. **多线程基本使用**: 多...

    C# 多线程编程

    在C#编程中,多线程是一个核心概念,它允许程序同时执行多个任务,从而提高应用程序的效率和响应性。本文将深入探讨C#多线程编程的关键知识点,包括线程的创建、同步与通信、线程优先级以及线程安全。 首先,线程的...

    C#线程锁介绍源码

    原子操作保证了操作的不可分割性,即操作要么全部完成,要么全部不完成,从而避免了多线程同时操作同一变量时的竞态条件问题。这在多线程环境中尤其重要,因为它可以防止线程在执行过程中被操作系统中断,从而避免...

    C#各种多线程使用的示例

    在C#编程中,多线程是实现并发执行任务的关键技术,它允许程序同时处理多个独立的任务,从而提高系统的效率和响应性。本资源“C#各种多线程使用的示例”提供了关于如何在C#中有效利用多线程的实践代码。 1. **线程...

    使用C#语言进行多线程程序设计

    - **Interlocked类**:提供了一组原子操作,用于在多线程环境下安全地修改变量值。 - **Task Parallel Library(TPL)**:提供了基于任务的并行编程模型,简化了多线程编程。 总之,C#作为一种现代化的编程语言,在...

Global site tag (gtag.js) - Google Analytics