Po uruchomieniu mówi mi to: NameError: nazwa 'lock' nie jest zdefiniowana?
• Załóżmy, że masz tablicę (data = []) zawierającą 500 000 elementów i każdemu elementowi przypisano losową wartość od 1 do 10 (random.randint (1,10)).
dla i w zakresie (500000): data [i] = random.randint ()
• Pozwól użytkownikom określić liczbę wątków roboczych (N). Użytkownik może wprowadzić wartość z przedziału od 1 do 10. Niepoprawne wartości powinny spowodować wyświetlenie komunikatu ostrzegawczego, a liczba wątków zostanie ustawiona na 5. • Opracuj metodę automatycznego podziału tablicy na N równych segmentów, gdzie N jest liczbą pracowników wątki (threadCount). Nie można tworzyć podwarstw, aby poradzić sobie z tym problemem; musisz wypracować metodę partycjonowania oryginalnej tablicy na podstawie indeksów. Podpowiedź jest podana poniżej, zakładając, że użytkownik wprowadził wątek 4.
Segment 1 (125 000 elementów) Segment 2 (125 000 elementów) Segment 3 (125 000 elementów) Segment 4 (125 000 elementów)
• Określ metodę wywoływania wątków, aby każdemu wątkowi przypisany był segment tablicy, na którym chcesz działać. Wątki te powinny tworzyć sumę elementów dla przydzielonego segmentu. Prototyp funkcji z jednym wątkiem podano poniżej:
sumowanie def (st, end, threadIndex):
gdzie: koniec i koniec reprezentują punkt początkowy i końcowy segmentu tablicy, a indeks jest numerem wątku.
Musisz określić mechanizm blokujący, aby upewnić się, że program może działać jednocześnie na tablicy.
• Po zakończeniu pracy przez każdy wątek program główny powinien obliczyć średnią końcową, sumując podsumy i nurkując według łącznej liczby elementów tablicy.
Ćwiczenie końcowe: Czy możesz rozszerzyć swój program tak, aby tablica była wypełniana losowymi liczbami przy użyciu wątków roboczych? Mój kod:
import random
import thread
def su(st,end,i):
global subtotal, data, locks
for index in range(st,end+i):
subtotal[i] += data[index]
lock.release()
numth = int(100)
data = list(range(numth))
for index in range(len(data)):
data[index] = random.randint(1,10)
wt=int(input("enter the number of working threads:"))
locks = list(range(wt))
subtotal = list(range(wt))
seg = len(data)/wt
st=0
for i in range(wt):
st= i * seg
end = st *seg -1
thread.start_new_thread(su, ())
locks = lock.acquire()
avg = sum(subtotal)/len(data)
print(avg)