码迷,mamicode.com
首页 > 编程语言 > 详细

线程同步

时间:2015-02-24 18:37:07      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

基本概念:

在应用程序中使用多个线程的一个好处是每个线程都可以异步执行。对于 Windows 应用程序,耗时的任务可以在后台执行,而使应用程序窗口和控件保持响应。对于服务器应用程序,多线程处理提供了用不同线程处理每个传入请求的能力。否则,在完全满足前一个请求之前,将无法处理每个新请求。

然而,线程的异步特性意味着必须协调对资源(如文件句柄、网络连接和内存)的访问。否则,两个或更多的线程可能在同一时间访问相同的资源,而每个线程都不知道其他线程的操作。结果将产生不可预知的数据损坏。

对于整数数据类型的简单操作,可以用 Interlocked 类的成员来实现线程同步。对于其他所有数据类型和非线程安全的资源,只有使用本主题中的结构才能安全地执行多线程处理。

线程同步的方法有很多,我们先看看join方法是如何实现同步的

参考:http://www.cnblogs.com/lxblog/archive/2012/12/26/2833974.html

 

class Program
    {
        private static Thread thread1;
        private static Thread thread2;

        static void Main(string[] args)
        {
            thread1=new Thread(new ThreadStart(Thread1Method));
            thread2=new Thread(new ThreadStart(Thread2Method));
            thread1.Start();
            thread1.Join();
            thread2.Start();
            thread2.Join();


        }

        public static void Thread1Method()
        {

            for (int i = 0; i < 5; i++)
            {
                Thread.Sleep(1000);
                Console.WriteLine("线程1正在运行");
            }
            
        }

        public static void Thread2Method()
        {
            for (int i = 0; i < 5; i++)
            {
                Thread.Sleep(1000);
                Console.WriteLine("线程2正在运行");
            }
        }
    }

这是一个简单的demo,运行结果是这样的

线程1正在运行
线程1正在运行
线程1正在运行
线程1正在运行
线程1正在运行
线程2正在运行
线程2正在运行
线程2正在运行
线程2正在运行
线程2正在运行
请按任意键继续.

线程1执行完才执行线程2

当然join方法可以有参数,用以设置阻塞时间

http://www.cnblogs.com/michaelxu/archive/2008/09/20/1293716.html

 

lock关键字

lock是一种比较好用的简单的线程同步方式,它是通过为给定对象获取互斥锁来实现同步的。它可以保证当一个线程在关键代码段的时候,另一个线程不会进来,它只能等待,等到那个线程对象被释放,也就是说线程出了临界区。用法:

 

线程同步

标签:

原文地址:http://www.cnblogs.com/jixinyu/p/4298810.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!