2011-01-25 57 views
1

我已經實現了一些由各個後臺線程處理的方法。我理解這樣做的複雜性,但是當我測試結果時,一切似乎都很好。每個線程有時會訪問相同的變量,並且在任何給定時間最多有5個線程工作,我想我應該使用同步鎖,但是我的問題是線程是否可以在不覆蓋變量的情況下執行進程內容。我的印象是,每個線程都爲該變量分配了一個內存中的網站,即使它被命名爲相同的,在內存中,它是與特定線程映射的不同位置,對嗎?所以如果發生衝突,你應該得到一個錯誤,如果它被另一個線程使用,它將無法訪問該變量。關於局部變量的多線程糾紛

我錯了嗎?

+3

這聽起來像你混淆「進程「和」線索「。通常,進程的內存空間是完全獨立的。但線程共享相同的內存空間。訪問同一內存的多個線程不會導致任何類型的錯誤,不會。除非您使用原子操作讀取/寫入值,否則它們只會覆蓋彼此的數據。 – 2011-01-25 15:32:57

+0

@Eric Giguere - 您應該將您的評論轉換爲答案,以便您可以獲得upvoted。 – mbeckish 2011-01-25 15:35:41

回答

2
  • 如果你在談論一個函數的約當地變量 - 不,每個線程都有自己的那些它的堆棧上的副本。
  • 如果你正在談論成員來自不同的線程被訪問的一類變量 - 是的,你需要保護他人(除非他們是隻讀)