wielowątkowość: dlaczego generatory nie są bezpieczne dla wątków? Co się dzieje, gdy jest udostępniany między wątkami?

czytamto pytanie która pyta, czy generatory są bezpieczne dla wątków, a jedna odpowiedź mówi:

Nie jest bezpieczny dla wątków; jednoczesne połączenia mogą przeplatać się i mieszać z lokalnymi zmiennymi.

Kolejna odpowiedź pokazuje, że możesz użyć blokady, aby upewnić się, że tylko jeden wątek korzysta z generatora naraz.

Jestem nowy w wielowątkowości. Czy ktoś może wymyślić przykład pokazujący, co dokładnie dzieje się, gdy używasz generatora bez blokady?

Na przykład wydaje się, że nie ma żadnych problemów, jeśli to zrobię:

import threading

def generator():
    for i in data:
        yield i

class CountThread(threading.Thread):
    def __init__(self, name):
        threading.Thread.__init__(self)
        self.name = name

    def run(self):
        for i in gen():
            print '{0} {1}'.format(self.name, i)

data = [i for i in xrange(100)]
gen = generator()
a = CountThread('a')
b = CountThread('b')
a.start()
b.start()

questionAnswers(1)

yourAnswerToTheQuestion