首页 > 试题广场 >

假设下面的函数foo会被多线程调用,那么让i、j、k三个变量

[单选题]
假设下面的函数foo会被多线程调用,那么让i、j、k三个变量哪些因为线程间共享访问需要加锁保护.()
int i = 0;
void foo()
{
	static int j = 0;
	int k = 0;
	i++; j++; k++;
}
  • i和j
  • i,j,k都需要
  • i
  • j和k
多线程调用时要进行保护时,主要是针对全局变量和静态变量的,函数内的局部变量不会受到影响。
这里i是全局变量,j是局部静态变量,所以 要进行保护。
发表于 2016-05-22 19:47:03 回复(4)
每个线程都有一个栈,保存自己的局部变量;多线程需要程序员考虑全局变量和静态变量的保护。
发表于 2016-06-13 10:59:08 回复(0)
可重入函数要求不能使用无保护的全局变量,所以i需要加锁,k为局部变量不用,j前加了static,static其中一个作用就是:延长变量的生存期,使其具有全局变量的作用,所以j也需要加锁
发表于 2016-05-05 09:34:46 回复(0)
线程内的局部变量是该线程所独有,是不会被共享的,自然就不要保护。
发表于 2017-01-10 12:07:17 回复(0)
这编译都不通过吧,方法里面怎么static变量?
发表于 2018-04-12 23:04:19 回复(0)
静态变量在方法区中,成员变量随对象在堆中,局部变量在虚拟机栈中。方法区和堆是所有线程共享的,而虚拟机栈是每个线程独享的
发表于 2018-04-02 14:27:15 回复(0)
i:初始化为0的全局变量,存在于.bss段,线程共享
j:初始化为0的静态变量,存在于.bss段,线程共享
k:局部变量,存在与栈,线程不共享,因为每个线程各有一个栈
发表于 2017-05-02 16:46:20 回复(0)
ij都有可能被多线程同时访问,k是栈里面的变量,只可能被该时刻的函数体所使用,所以不用
发表于 2016-11-03 11:37:01 回复(0)
j为局部静态变量,对定义自己的函数体始终可见,在多线程中需要保护。
i为全局变量,需要保护
发表于 2016-09-12 10:49:02 回复(0)
局部静态变量是啥?
发表于 2017-08-18 01:01:57 回复(1)
Java里没有静态局部变量一说,搜了一下发现是C++里有这个说法,该静态局部变量只对其所在的函数可见,存活期是整个程序的运行期,只进行一次初始化。可以看这篇博文:https://blog.csdn.net/zkangaroo/article/details/61202533
发表于 2019-11-11 15:27:01 回复(1)
全局变量和静态变量需要加锁保护
发表于 2019-07-09 07:38:37 回复(0)
线程保护全部变量,静态变量
发表于 2019-05-09 20:11:54 回复(0)
线程安全发生在多个线程访问共享资源的时候,i在foo外定义,j是static,作用域都大于foo,都可被多个线程共享,所以需要加锁,k在foo内部,被各个线程独享,不存在线程安全问题,不用加锁。
发表于 2019-04-16 01:15:49 回复(0)
Java 局部变量怎么能用static修饰 简直是在逗我
发表于 2019-04-12 17:11:02 回复(0)
静态变量的生存周期是整个源文件,所以在多线程中为了保护数据,为可以改变的数据加锁,而k的生存周期之在函数中,所以不用加锁
发表于 2019-04-02 11:34:43 回复(0)
void foo()
{
    static int j = 0;
    int k = 0;
    i++; j++; k++;
变量j就不能这么定义,方法体内不能定义静态变量
发表于 2019-03-31 14:47:46 回复(0)

多线程需要程序员考虑全局变量和静态变量的保护。局部变量是在该线程内的,不需要被保护。

发表于 2018-11-07 11:09:58 回复(0)
全局变量和静态变量需要保护。
发表于 2018-10-29 17:13:16 回复(0)
能创建静态局部变量吗..
发表于 2018-10-16 21:01:43 回复(0)