2013-03-25 13 views
9

Próbuję zawinąć głowę, jak działa wątkowanie, i uważam, że mogłem to skomplikowac.Próbuję owijać głowę wokół wątków

Original Zrozumienie:

Poprzedni Myślałem wątki były ograniczone do jednej klasy i jej klas podrzędnych, bez klasy mogą być współużytkowane przez wątków, a komunikacja pomiędzy wątkami robione to prawdziwy dla mnie trudne do zrozumienia.

Nowe zrozumienie:

Ale im więcej czytam o tym, że zamiast Wygląda wątki są po prostu działa w losowym momencie w samym kodzie. Możesz ograniczyć go do pewnych obszarów, ale teoretycznie ten sam kod może być uruchamiany wiele razy w każdym wątku.

Innymi słowy, jeśli widzisz kod jako system drogowy ze zwojami i połączeniami, jest to przepływ, jaki może wykonać program, główny wątek właśnie przez to przechodzi. Jeśli zostanie utworzony nowy wątek, wszystko, co musisz zrobić, to powiedzieć, od czego powinien zacząć, a kod idzie stamtąd, może używać tych samych klas i poleceń, więc jeśli skonstruujesz swój kod "źle", istnieje ryzyko dwóch fragmentów kodu " Upadek ", ale poza tym nie ma ograniczeń w czytaniu i pisaniu kodu, jego częścią jest ten sam program, tylko kilka" samochodów "na" drogach ".

Możesz ograniczyć wątek, aby pozostać w określonym obszarze (pętla/ograniczona część kodu), i tylko wchodzić w interakcje w określonych miejscach, lub możesz zignorować go i po prostu mieć nadzieję na uniknięcie "awarii".


Dzięki "nowemu zrozumieniu" pracując z wątkami, łatwiej jest mi owinąć sobie głowę, więc czy jest to zrozumiałe?

+7

Tak, twoje późniejsze zrozumienie jest mniej więcej poprawne! Aby rozszerzyć swoją analogię, funkcje synchronizacji wątku i obiekty (np. 'ManualResetEvent' i' lock') są jak światła drogowe, które zapobiegają kolizjom samochodów. :) –

+7

Istnieje doskonały darmowy ebook o wątków tutaj: ['Albahari'] (http://www.albahari.com/threading/) –

+0

Dzięki za wejście od was obu. Nagle sprawia, że ​​praca staje się jaśniejsza i otulam głowę. O wiele prostsze ... O wiele bardziej niebezpieczne, jeśli zrobi się źle :) – Taoh

Odpowiedz

1

Uderzyłeś. Ogólnie rzecz biorąc, wątki służą do wykonywania specjalistycznych zadań i nie nakładają się na siebie. Jeśli główny wątek ma odrodzić sub-wątek, aby wykonać pracy, główny wątek prawie zawsze nie będzie również wykonywał tego pracy.

Obszary, na które się nakładają, będą musiały być "bezpieczne w dotyku", aby nie wchodzić sobie w palce; na przykład wiele wątków roboczych wypełnia kolekcję dla głównego wątku. Podczas przeglądania klas w MSDN zauważysz, że na dole znajduje się komunikat mówiący, czy mają wbudowane bezpieczeństwo wątków, czy też musisz to zrobić samemu, używając blokady .net, muteksów lub semaforów.

+0

Dzięki, wcześniej oglądali wątki w niewłaściwy sposób. Jako obszary oddzielone od reszty programu, zamiast postrzegania ich jako "wielu sterowników", i sposobem na uniknięcie kolizji byłoby ich oddzielenie, ale nie było to wymagane. – Taoh

Powiązane problemy