Article View: pl.comp.lang.delphi
Article #345609Re: Wątki
From: Sebastian Biały
Date: Mon, 06 Mar 2017 22:08
Date: Mon, 06 Mar 2017 22:08
42 lines
2960 bytes
2960 bytes
On 2017-03-06 20:08, Roman Tyczka wrote: >> Znacznie ciekawsze rzeczy pojawiają sie jak ktoś zapyta jak szybko >> zmiana w jednej z pamięci pierwszego cpu będzie widoczna w drugim cpu i >> czy aby na pewno we właściwej kolejności jaką zakładał programator :D > A możesz podać jaki prosty przykład takiej błędnej sytuacji Wątek a) ustawia zmienną X a *potem* zmienną Y. Wątek b) widzi najpierw zmienioną Y a potem X Jeśli masz do czynienia z typowym hackerem, to znajdziesz takie kfiatki jak busy loop na zmiennych w pamięci dzielonej zamiast poprawnej synchronizacji międzywątkowej/miedzyprocesowej. Stąd łatwa droga do np. deadlocka. Oczywiście wszystko zależy od tego jak cpu sychronizują zmiany pomiędzy sobą. Prawidlowo programista powinien zakładać że dowolnie pomiedzy barierami. > oraz jak temu > zaradzić? Dla jednoprocesorowego systemu opartego na x86 Intel był bardzo wyrozumiały. Dla innych systemów tego typu problemy mogą wystąpić nawet bez NUMA, z jednym cpu: https://en.wikipedia.org/wiki/Memory_ordering Jak zaradzić? Przeczytać dokumentacje do systemu. Najprościej i najogólniej używać prymitywów dostepnych na poziomie cpu ewentualnie używać memory barrier w bardziej skomplikowanych sytuacjach nawet jesli pozornie wydaje się to bez sensu (w skrajnym przypadku stawia się "dużo muteksów" co może nie jest sensowne, ale działa). CPU wymieniają między soba informacje o zmianach w prywatnych pamięciach i cache: https://en.wikipedia.org/wiki/Cache_coherence Nie ma innej drogi jak używać gotowcow dostarczonych przez kompilator albo OS do tego żeby być choć troche przenośnym. Troche szkoda że teraz wszystko jest x86. Kiedy był Sparc ludzie jeszcze zastanawiali się "a co jeśli". Obecnie już nie :/
Technical Details
Message-ID:
<o9kmls$jsv$1@node1.news.atman.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mailReferences:
<770fa4f8-96e5-4b5e-8772-e87517a0eaa6@googlegroups.com> <o8q1j2$3jd$1@node2.news.atman.pl> <82f632d0-ef0c-442f-8af7-bc94c95f3d51@googlegroups.com> <o8rpkn$pod$1@node2.news.atman.pl> <o8s0ks$96s$1@node1.news.atman.pl> <o8s1ek$1e7$1@node2.news.atman.pl> <u2bcwew8k8oc.dlg@tyczka.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail From: Sebastian Biały <heby@poczta.onet.pl> Newsgroups: pl.comp.lang.delphi Subject: Re: Wątki Date: Mon, 6 Mar 2017 23:08:43 +0100 Organization: ATMAN - ATM S.A. Lines: 43 Message-ID: <o9kmls$jsv$1@node1.news.atman.pl> References: <770fa4f8-96e5-4b5e-8772-e87517a0eaa6@googlegroups.com> <o8q1j2$3jd$1@node2.news.atman.pl> <82f632d0-ef0c-442f-8af7-bc94c95f3d51@googlegroups.com> <o8rpkn$pod$1@node2.news.atman.pl> <o8s0ks$96s$1@node1.news.atman.pl> <o8s1ek$1e7$1@node2.news.atman.pl> <u2bcwew8k8oc.dlg@tyczka.com> NNTP-Posting-Host: 176.115.85.233 Mime-Version: 1.0 X-Trace: node1.news.atman.pl 1488838140 20383 176.115.85.233 (6 Mar 2017 22:09:00 GMT) X-Complaints-To: usenet@atman.pl NNTP-Posting-Date: Mon, 6 Mar 2017 22:09:00 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.7.1 In-Reply-To: <u2bcwew8k8oc.dlg@tyczka.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit