+ -
当前位置:首页 → 问答吧 → 初学者问题个小白问题

初学者问题个小白问题

时间:2011-12-05

来源:互联网

如果一个函数是static的,那么在该static函数中定义的变量也是static的吗?
因为我在想这么一个问题,比如有两个线程同时在执行static函数M,那么函数M中定义的变量如果也是static的,那么两个线程在操作static函数M中的变量时,实际上都是在操作一个变量,这样势必会带来问题。。。。所已请教下大家这个很基础的问题。

作者: BusyDonkey   发布时间: 2011-12-05

就是这样,因为有存在并发风险,所以设计static方法的时候要考虑清楚。并适当的同步加锁

作者: fangxinggood   发布时间: 2011-12-05

不光是枷锁 你甚至可以使用线程安变量

作者: bios8086   发布时间: 2011-12-05

一个进程中这两个线程应该不相同的,唯一性啊

作者: sjmnwo   发布时间: 2011-12-05

不是,你理解错了。

每个线程拥有自己独立的堆栈。所以那些在堆栈上分配的简单类型不存在并发冲突。

相反,即便是成员函数,如果同时访问同一个引用变量,同样有并发问题。

你可以做一个实验:

class Test
{
  public static void foo(int i)
  {
  int x = i;
  while (x != 0)
  {
   
  }
  }
}

然后你开2个线程去访问,第一个调用 foo(1) 第二个调用 foo(0)。

作者: caozhy   发布时间: 2011-12-05

引用 4 楼 caozhy 的回复:

不是,你理解错了。

每个线程拥有自己独立的堆栈。所以那些在堆栈上分配的简单类型不存在并发冲突。

相反,即便是成员函数,如果同时访问同一个引用变量,同样有并发问题。

你可以做一个实验:

class Test
{
public static void foo(int i)
{
int x = i;
while (x !……


看成类成员了。caozy 说的对。

作者: fangxinggood   发布时间: 2011-12-05