Komentarze do: Synchronizacja wątków w C# i C++ (Spinlock) /synchronizacja-watkow-w-c-i-c-spinlock/ Sun, 04 Mar 2018 10:14:55 +0000 hourly 1 https://wordpress.org/?v=5.0.3 Autor: Gabriel Chomiczewski /synchronizacja-watkow-w-c-i-c-spinlock/#comment-18 Thu, 15 Sep 2016 16:30:00 +0000 /?p=309#comment-18 Częściowo się z tobą zgadzam, a częściowo nie. Według mnie nie ma co już tej sprawy roztrząsać, mamy swoje zdania. Co nie oznacza, że twoje są błędne, to samo z moimi.

]]>
Autor: Kamil Koczurek /synchronizacja-watkow-w-c-i-c-spinlock/#comment-17 Thu, 15 Sep 2016 16:15:00 +0000 /?p=309#comment-17 1. Ale jest błędna, bo źle opisuje sytuację. Jeśli znasz już wielowątkowość to spoko, może ty załapiesz, ale nijak nie ma się to tak naprawdę do tematu wątków.
2. Sorka, źle popatrzyłem. ;-;
3. Shhh, mi się to rzuca w oczy.
4. To zdefiniowane przez standard, ta metoda zadziała zawsze i żaden kompilator nie ma tam prawa przeprowadzić takiej optymalizacji.
5. Ponieważ tak zaprojektowany jest atomic_flag, domyślny memory_order jest tam dla kompatybilności (std::memory_order_seq_cst), ale dużo lepiej używać std::memory_order_release, ponieważ… cóż, użycie go tu jest jednym z powodów dla których powstał, głównie chodzi o wydajność.
6. Jest zła bo zakłada, że nigdy nie można używać tego samego zasobu z dwóch (lub więcej) wątków co generalnie nie jest prawdą, gdyby tak było zysk z wielowątkowości zwykle byłby znikomy i takie podejście nie prowadzi do niczego dobrego. Nawet klasyka w stylu std::shared_ptr jest bezpieczna przy odczycie z wielu wątków, ale nie zapisie.

]]>
Autor: Gabriel Chomiczewski /synchronizacja-watkow-w-c-i-c-spinlock/#comment-16 Thu, 15 Sep 2016 16:03:00 +0000 http://nastoletni.pl/?p=309#comment-16 Odnosząc się do 1.:
Kwestia gustu, mi te porównanie na prawdę zapadło w pamięć i uważam je, za bardzo dobre, dlatego też się nim podzieliłem.

Do 2.:
Użyłem, mogłem zrobić to pole w sumie statycznym nawet. Nie wiem o Ci chodzi.

Do 3.:
Przepraszam, sprawdzałem tekst, ale nie wszystkie ‚ę’, ‚ą’ etc. złapałem. Nie bądźmy tacy hmm drobiazgowi.

Do 4.:
Mógłby to zrobić, różne kompilatory mają różne optymalizacje. Nie tylko gcc istnieje. Przezorny zawsze ubezpieczony, chyba jakoś tak się mówi 🙂

Do 5.:
Dlaczego? Rozwiń.

Do 6.:
Nie zgodziłbym się z tym, że ta definicja jest zła. Nie jest książkowa oraz nie jest kompletna, ale spokojnie wystarczy, aby zrozumieć jej cel. Też uważam, że na angielskiej jest lepsza, ale niemal wszystko na angielskiej Wikipedii jest napisane bardziej hmm jakościowo(?).

Pozdrawiam!

]]>
Autor: Kamil Koczurek /synchronizacja-watkow-w-c-i-c-spinlock/#comment-15 Thu, 15 Sep 2016 14:37:00 +0000 http://nastoletni.pl/?p=309#comment-15 „Przytoczę pewne bardzo obrazowe porównanie. Wyobraź sobie, że jesteś w restauracji. Podnosisz menu, wybierasz potrawę i czekasz na kelnera. Widzisz, że tymczasowo obsługuje innego klienta. Mija kilka, kilkanaście minut, a kelner wciąż stoi przy stoliku innego klienta, obsługuje tylko jego. Dopiero, gdy klient płaci i wychodzi z restauracji, kelner podchodzi do Ciebie i zaczyna cię obsługiwać. W tym czasie przychodzi inny klient, ale kelner jest zajęty tylko tobą. Mniej więcej tak działa aplikacja jednowątkowa (nasz kelner).”
W życiu nie widziałem gorszej próby zobrazowania jednowątkowości. Opisaną sytuację da się dobrze ogarnąć jednym wątkiem z wykorzystaniem prostego systemu zdarzeń. Wielowątkowość tutaj polegałaby na dodaniu kolejnych kelnerów i zadbaniu o to by nie wpadali sobie pod nogi próbując obsłużyć tego samego gościa. O tym zresztą jest cała reszta twojego wpisu.

„Słówka volatile użyłem”
Nie użyłeś.

„gdyż nie chce, by kompilator potraktował tę pętle tak: if (slock != THREAD_COUNT) while(1); a tego oczywiście nie chcemy”
1. Kto nie chce?
2. I tak by tego nie zrobił.

„lock.clear();”
Zły std::memory_order.

„Sekcja krytyczna – fragment kodu programu, w którym korzysta się z zasobu dzielonego, a co za tym idzie w danej chwili może być wykorzystywany przez co najwyżej jeden wątek.”
Definicja sekcji krytycznej na polskiej wikipedii jest błędna, zwłaszcza ten fragment. Odsyłam tu: https://en.wikipedia.org/wiki/Critical_section

]]>