🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #345609

Re: Wątki

#345609
From: Sebastian Biały
Date: Mon, 06 Mar 2017 22:08
42 lines
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-mail
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>

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