社区
Linux/Unix社区
帖子详情
请问在多线程得程序中,函数内的局部变量是否线程安全的
guott1020
2003-09-03 06:02:38
如题
...全文
167
6
打赏
收藏
请问在多线程得程序中,函数内的局部变量是否线程安全的
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bluemiles
2003-09-04
打赏
举报
回复
关于POSIX线程的专著并不多,可以到ibm/developerworks找找,csdn的文档区也有一些
Nvram
2003-09-04
打赏
举报
回复
中文书可以看:UNIX网络编程v1
还有1本SUN出的关于线程编程的,但现在书店几乎看不到了。
如果你愿意看英文,网上有很多的。
ari
2003-09-04
打赏
举报
回复
stevens的书提到过线程,或者到ibm开发者网络中找找.
或者man -k pthread看看.
guott1020
2003-09-03
打赏
举报
回复
请楼上的老兄给推荐几本书,不胜感激
Nvram
2003-09-03
打赏
举报
回复
局部变量是线程安全的,因为每个线程都有自己的堆栈
关于第2个问题,你还是看看书吧,不是1句2句能说清的
guott1020
2003-09-03
打赏
举报
回复
还有,在编写线程安全的函数时应该注意什么?
请你谈谈
多线程
中
静态变量、实例变量、
局部变量
?
静态变量(类变量)为所有对象共享,共享一份内存,一旦静态变量被修改,其他对象均对修改可见,故线程非安全。 实例变量属于创建对象,存储在堆内存
中
,若系统
中
只存在一个该类的对象,在
多线程
环境下,该对象被某个线程修改后,其他线程对修改均可见,故线程非安全;如果每个线程执行都是在该类的不同对象
中
,那对象与对象之间的实例变量的修改将互不影响,故
线程安全
。
局部变量
在每个线程执行时,被存放在各自栈帧的工作内存
中
,线程间不共享,故不存在
线程安全
问题。即在每个线程都会有一个该
局部变量
的拷贝,一个线程对该
局部变量
的改变不会影
多线程
访问全局变量和
局部变量
剖析
如果一个变量是成员变量,那么多个线程对同一个对象的成员变量进行操作时,它们对该成员变量是彼此影响的,也就是说一个线程对成员变量的改变会影响到另一个线程。 如果一个变量是
局部变量
,那么每个线程都会有一个该
局部变量
的拷贝(即便是同一个对象
中
的方法的
局部变量
,也会对每一个线程有一个拷贝),一个线程对该
局部变量
的改变不会影响到其他线程。 这是因为成员变量和
局部变量
的生命周期不同,成员变量会在引用本类的对象时创建,随着对象的销毁而销毁,所以多个线程并发访问会彼此影响。而
局部变量
则是在访问方法时创建,在结束方法时销
多线程
:线程内
局部变量
ThreadLocal类 该类提供了线程内局部 (thread-local) 变量。 好比有两个窗口(两个线程),一个窗口可以拿饮料,一个窗口可以拿食物。现在有多个人要来拿东西,如果在饮料窗口有的人拿到了饮料,有的人拿到了不该拿的食物,就说明线程之间出现了混乱,我们应当避免这种情况出现。 以下代码就可能会出现线程混乱的问题: private static int data; publi...
函数
中
静态
局部变量
的初始化过程是
线程安全
的吗?
函数
中
静态
局部变量
的初始化过程是
线程安全
的吗?本文分析了一个 Stack Overflow 的回答,并对单例模式的情况进行了示例
多线程
下
局部变量
与全局变量的使用及区别
局部变量
是在栈
中
运行。每个运行的线程都有自己的堆栈。 别的线程无法访问得到,因此我们说,
局部变量
是“安全”的。 全局变量是在堆
中
运行。堆是对所有的线程都可见的。 因此在两个以上的线程访问全局变量时,就会出现所谓的 “不安全”,a线程访问全局变量,赋值为a,然后
中
间睡眠了一段时间,在此期间b进程访问了全局变量,赋值为b了,此时a线程醒来了,抢了处理器,发现全局变量是b,显然不是我们a线程所要到的值,这时就要加入同步机制或者定义为
局部变量
,比如如果是方法的话就加同步方法,代码块就加同步代码块。 ...
Linux/Unix社区
23,119
社区成员
74,507
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章