线程安全

一 线程安全的定义

线程安全的书面定义常常是: 多个线程访问同一段代码,不会产生不确定的结果.

这种定义是从结果的角度来判断.这种定义方式比较数学化(集合味道),具有普适性,但是很抽象.因为程序员更喜欢一种直观,场景化,准则性和指导性的东西.

比如程序员更喜欢下面这些:

1)如果是单线程环境,一定是线程安全的

2)如果线程之间没有共享资源,一定是线程安全的

3)如果资源是只读的,就一定是线程安全的.

4)如果对资源加锁,就一定是线程安全的.

……

有了这些场景化的具体描述,程序员就可以根据这些条件,去判断自己的代码是否线程安全.

二 具体化

其实线程安全归根结底,线程安全涉及两个方面:多个线程和共享资源.这既是引起线程安全问题的两个必要条件,也是线程安全问题反映到的两个具体对象.

保证线程安全可以从这两个方面着手,而检查多线程问题同样也可要从这两个对象来入手,加上访问类型,来看线程安全问题:

1)对共享资源的访问方式包括两种基本操作: 读和写.

2)共享资源本身: 如果多个线程同时访问共享资源,会不会对资源本身的结构造成破坏,这其实是要确保资源的完整性[更新动作不是原子性的].

3)各个线程本身: 如果多个线程同时访问共享资源,每个线程的计算结果是否正确[和计算结果的业务含义有关].

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>