On Oct 27, 10:12 am, "Diez B. Roggisch" <[EMAIL PROTECTED]> wrote: > jasiu85 schrieb: > > > > > Hey, > > > Please take a look at the code of the two threads below: > > > COMMON_DICT = {} > > > def thread_1(): > > global COMMON_DICT > > local_dict = prepare_dict() > > COMMON_DICT = local_dict > > > def thread_2(): > > global COMMON_DICT > > local_dict = COMMON_DICT > > use_dict(local_dict) > > > Do I need a lock to protect the COMMON_DICT dictionary? AFAIK bytecode > > operations are atomic and in each thread there's only one crucial > > bytecode op: STORE_NAME in the first thread and LOAD_NAME in the > > second one. So I suspect that everything will work just fine. Am I > > right? > > Depending on what you mean by "right". > > The above is not enough to judge what is really happening. But depending > on the execution order, thread_1 overwrites the reference in COMMON_DICT > *after* thread_2 has altered it. > > But it won't crash or anything. If that's right for you. > > Diez
The second thread doesn't alter the dictionary, it only reads it. Even if the first thread puts a reference to a new dictionary into the COMMON_DICT variable while the second thread is reading the old dictionary, such sematics is fine for me. I'm seeking for a kind of Producer/Consumer pattern. So the first thread produces some data in a form of a dictionary. The second thread reads it from time to time. It's sufficient for me if a dictionary is "lost" because the first thread overwrites the COMMON_DICT variable before the second thread tries to read it. It's also sufficient for me if the first thread updates COMMON_DICT variable while the second thread is reading the previous copy of the dictionary. So from my point of view the most critical parts are these two lines: COMMON_DICT = local_dict # in the first thread local_dict = COMMON_DICT # in the second thread Can these two instructions by any chance interfere with each other in a way that will crash either of the threads? I hope I made myself a little bit more clear :). Thanks!! Mike -- http://mail.python.org/mailman/listinfo/python-list