話は変わる二つのスレッドとグローバル変数で始まる。..多くの時間:)ナンバーワンは(簡単にするために、我々は、T1呼ぶ)乱数とストアを生成し、スレッドpythonのグローバル変数は、
それはグローバル変数GLBにあります。
スレッド番号2(別名t2)グローバル変数の値をチェックし、値に達すると一定期間まで値を出力し始めます。
しかし、t1でグローバル変数の値が変更された場合でも、ループ内の値が変更され、これは必要ありません!
import random
import time
import threading
GLB = [0,0]
#this is a thread
def t1():
while True:
GLB[0] = random.randint(0, 100)
GLB[1] = 1
print GLB
time.sleep(5)
#this is a thread
def t2():
while True:
if GLB[0]<=30:
static = GLB
for i in range(50):
print i," ",static
time.sleep(1)
a = threading.Thread(target=t1)
a.start()
b = threading.Thread(target=t2)
b.start()
while True:
time.sleep(1)
質問は次のとおりです:
私は擬似コードを書こうとする理由のために、ループ内の変数静的に変更?それはループからエスケープする定数unitlのままにする必要があります! 変数へのロックを作成できますか?あるいは、問題を解決する他の方法がありますか?
ありがとうございました。
'static'はそのループ内で変更すべきではありません。私たちがテストするための小さな実例を書くのはどうですか? – tdelaney
問題は '静的'を割り当てる機会が来る前に 'GLB'が変更されるということです。それはあなたが見ているものですか? – tdelaney
@AlejandroSazo 'static'はオブジェクトへの新しい参照であるため、コピーする必要はありません。その不変の 'int'から、あなたは本当にコピーを得ていません。 – tdelaney