2011-01-25 54 views
1

我已经实现了一些由各个后台线程处理的方法。我理解这样做的复杂性,但是当我测试结果时,一切似乎都很好。每个线程有时会访问相同的变量,并且在任何给定时间最多有5个线程工作,我想我应该使用同步锁,但是我的问题是线程是否可以在不覆盖变量的情况下执行进程内容。我的印象是,每个线程都为该变量分配了一个内存中的网站,即使它被命名为相同的,在内存中,它是与特定线程映射的不同位置,对吗?所以如果发生冲突,你应该得到一个错误,如果它被另一个线程使用,它将无法访问该变量。关于局部变量的多线程纠纷

我错了吗?

+3

这听起来像你混淆“进程“和”线索“。通常,进程的内存空间是完全独立的。但线程共享相同的内存空间。访问同一内存的多个线程不会导致任何类型的错误,不会。除非您使用原子操作读取/写入值,否则它们只会覆盖彼此的数据。 – 2011-01-25 15:32:57

+0

@Eric Giguere - 您应该将您的评论转换为答案,以便您可以获得upvoted。 – mbeckish 2011-01-25 15:35:41

回答

2
  • 如果你在谈论一个函数的约当地变量 - 不,每个线程都有自己的那些它的堆栈上的副本。
  • 如果你正在谈论成员来自不同的线程被访问的一类变量 - 是的,你需要保护他人(除非他们是只读)