Na vícejádrech je problém s přístupem ke sdíleným proměnným. Na jednom jádře ti aspoň zaručuje, že plánovač nerozdělí instrukci, tedy že se vždy zapíše celé slovo. Na více jádrech ale ti tuto jistotu nic nedává, jediný co máš jistý je zápis alignovaného slova v délce nativní bitové šíře procesoru, která se provádí v jednom taktu. I tak to není žádný terno, protože zápis dvou slov byť v "dobrém pořadí" nemusí znamenát výhru, protože procesory si mohou pořadí obrátit. Do hry vstupují cache (cache nemusí obsahovat aktuální stav paměti), optimalizace instrukčního toku, instrukce se mohou předbíhat, atd... Řeší se to zamykáním sběrnice (interlocked operace), nebo protokolem acquire / release. Samozřejmě v highlevel programování na to máme zámky, ale s každým takovým pohodlným nástrojem počítejte výkon dolů. |