多线程学习系列:(三)线程同步基础上
来源:互联网 发布:php团购代码逻辑 编辑:程序博客网 时间:2024/05/29 15:13
其实,如果线程都是很独立的,不涉及到任何资源访问的,那么这些毫无干扰的线程不会产生什么问题。但是在实际应用中我们的线程总是涉及到资源访问的,而且往往涉及到共享资源的访问,那么就产生了线程同步的问题。一直觉得线程同步这个名词很奇怪,字面上看同步就是使得步调一致,线程同步是不是就是让线程步调一致的访问资源呢?事实上反了,线程同步恰巧是让线程不同时去访问资源而是去按照我们期望的顺序依次访问资源(是同步资源访问的行为而不是同步同时访问资源)。一句话,多个线程(不仅仅局限于相同进程)如果需要访问相同的可变资源的话就可能需要考虑到线程同步的手段。还有两个常见的名词是线程安全和线程冲突,所谓线程冲突就是由于多线程访问共享资源带来的问题,某个操作是线程安全就是表明这个操作没有线程冲突问题,要达到线程安全就要用线程同步的手段来解决。在MSDN类库中可以看到方法都注明了是不是线程安全的,如果不是那么我们在多线程程序总使用这个方法的话就要考虑是否要线程同步了。
既然要让线程的步调一致,那么我们首先可以想到的是,如果一个线程没有完成我们就等,一直等到它完成:
Stopwatch sw = Stopwatch.StartNew();
Thread t1 = new Thread(() =>
{
Thread.Sleep(1000);
result = 100;
});
t1.Start();
Thread.Sleep(500);
while (t1.IsAlive) ;
Console.WriteLine(sw.ElapsedMilliseconds);
Console.WriteLine(result);
假设线程在完成后会把结果写入result这么一个静态的变量,主线程在启动了新线程之后只花了500毫秒就做好了自己的事情,接下去一定要等待线程计算完成之后才能进行后续的操作,这个时候我们通过不断询问线程是不是还存在来得知线程是不是完成了计算,500毫秒后返回结果:
- 多线程学习系列:(三)线程同步基础上
- 多线程学习系列:(五)线程池基础上
- 浅谈.NET下的多线程和并行计算(三)线程同步基础上 (转)
- 多线程学习系列:(八)Winform中多线程编程基础上
- C# 多线程学习系列三:线程优先级、线程同步以及向线程传递参数
- 多线程学习系列:(四)线程同步基础下
- 多线程学习(三)线程的同步与锁
- JAVA学习笔记--多线程(三)synchronized实现线程同步
- 多线程编程学习笔记——线程同步(三)
- Java多线程系列3(线程同步)
- C#Thread类多线程系列之(三)线程同步技术
- Java多线程(三)、线程同步
- 多线程小结(三)线程同步总结
- MFC多线程与线程同步 (三)
- Java多线程(三)、线程同步
- Java多线程(三)、线程同步
- Java多线程(三)、线程同步
- Java多线程(三)、线程同步
- 多线程学习系列:(一)前言
- [转]见与不见
- 多线程学习系列:(二)线程基本知识
- 基于反相代理的Web缓存加速——可缓存的CMS系统设计
- 数据库技巧——MySQL十大优化技巧
- 多线程学习系列:(三)线程同步基础上
- ERROR: the user data image is used by another emulator. aborting错误!
- VMware1.0.6 + CentOS5.5 + Oracle10g RAC安装成功
- 多线程学习系列:(四)线程同步基础下
- Qt 字体大小的计算
- 用DirectShow转换图片格式
- 多线程学习系列:(五)线程池基础上
- 开通csdn
- 多线程学习系列:(六)线程池基础下