愤怒的小狐狸----博客专栏

我曾在夜里听你唱那些或许晴朗或许忧伤的歌,我曾梦到那些深深浅浅的花瓣缀满着你的发间,随月光轻舞飞扬... ...

线程安全

线程安全

 

       线程安全的概念只适用于多线程程序,而非单线程。假设代码所在的进程中有多个线程同时运行,而这些线程可能会同时运行这段代码,如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期是一样的,就是线程安全的。

       线程安全问题都是由全局变量和静态变量引起的。

       若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来讲,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。

 

举例:比如一个 ArrayList 类,在添加一个元素的时候,它可能会有两步来完成:1. Items[Size] 的位置存放此元素;2. 增大 Size 的值。

在单线程运行的情况下,如果 Size = 0,添加一个元素后,此元素在位置 0,而且 Size=1

而如果是在多线程情况下,比如有两个线程,线程 A 先将元素存放在位置 0。但是此时 CPU 调度线程A暂停,线程 B 得到运行的机会。线程B也向此 ArrayList 添加元素,因为此时 Size 仍然等于 0 (注意哦,我们假设的是添加一个元素是要两个步骤哦,而线程A仅仅完成了步骤1),所以线程B也将元素存放在位置0。然后线程A和线程B都继续运行,都增加 Size 的值。

那好,现在我们来看看 ArrayList 的情况,元素实际上只有一个,存放在位置 0,而 Size 却等于 2。这就是“线程不安全”了。

 

线程安全问题的实质还是由多个线程访问公共资源的冲突引起的。

线程安全:在多线程环境下,不用自己做同步处理。

线程不安全:在多线程环境下,必须做线程同步,不然会有未知后果。

 

阅读更多
文章标签: 多线程
个人分类: Linux
想对作者说点什么? 我来说一句

c/c++内存池

2017年09月26日 5KB 下载

线程安全的单例模式

2012年12月07日 345KB 下载

c++ stl线程安全

2011年08月07日 393KB 下载

Action是否线程安全

2009年04月20日 73KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭