线程同步是一个很困扰大家的一个问题,在线程中有时需要必须的同步机制来控制程序的运行,但什么时候需要加同步机制,什么地方又不需要这些没必要的同步机制呢?在不需要同步的地方加上了同步机制只会降低程序的效率,所以不必要的地方就一定不要加上同步的代码。
我们首先要明白,线程在切换之间都做了些什么事情,首先我们要知道,在系统中全局变量是在全局空间分配的,而局部变量是在系统堆栈中分配的,大家注意了,这两点概念很重要的。操作系统会为我们的每一个线程保护寄存器和堆栈现场,也就是说在线程切换的时候操作系统会为我们的线程恢复原来的寄存器和堆栈现场的(懂些汇编可能更容易理解一些)。所以大家一定要明确,虽然多个线程执行的代码相同,但是他们的局部变量的值实际上也是不相同的,因为线程切换的时候操作系统会恢复他们原来的值,所以局部变量一般不需要同步,当然特殊的情况大家就要仔细了。
这里大家还要注意一点,就是只有函数中的局部变量才是在堆栈上分配空间的,其他的,比如:类的成员变量都不是在堆栈分配空间的,全局变量就更不是了。
相关文章
- 10-10setState各在什么时候执行同步/异步
- 10-10线程什么时候需要同步,什么时候不需要同步?
- 10-10java – 在Apache Tomcat应用程序中,MBean字段是否需要易失/同步才能使JMX更新出现在其他线程中?
- 10-10eclipse svn同步资源库时忽略某些不需要提交文件类型和文件夹
- 10-10如果只有一个编写器线程,我们是否需要同步java HashMap获取
- 10-10eclipse svn同步过滤掉某些不需要同步的文件
- 10-10线程同步:何时互斥锁不够,还需要条件变量?
- 10-10iOS 面试题(二):什么时候在 block 中不需要使用 weakSelf --转自唐巧
- 10-10线程安全意味着不需要同步了吗?