🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #2058

Re: ‘lock–free’ aka odżywianie grupy asemblerowców :-)

#2058
From: Andrzej Grażyński
Date: Fri, 19 Mar 2010 09:26
112 lines
3229 bytes
> nie  znam  tych  wszystkich skrócików ;-) , ale nie autor odpowiedzi się
> trochę  wgłębi w list autora pytania… :-)   czy czasem te różne paradyg-
> manty nie przenoszą po prostu tego samego blokowania na inne poziomy wi-
> doczności  i szerokości, bardziej  ukryte dla programisty?   a to ciągle
> ta sama instrukcja logiczna.

Tak, przenoszą, z istotnymi różnicami:

0. Blokada realizowana jest w sposób sprzętowy

1. Nakładanie i zdejmowanie blokady nie jest odrębną częścią algorytmu 
rozwiązywania zadania, jest elementem atomu wchodzącego w skład tego 
algorytmu

2. Blokada nakładana jest na czas wykonywania jednej instrukcji

3. Istnieje gwarancja zdjęcia blokady, bo wykonywanie instrukcji musi 
się zakończyć (jeśli tak nie jest, mamy ogólną awarię sprzętową, co jest 
katastrofą dla całego systemu).

4. Nie istnieją problemy typowe dla synchronizacji, np. deadlock


5. Nie ma gwarancji uzyskania wyłącznego dostąpu do zasobu, nie ma więc 
gwarancji wykonania żądanej operacji.


Dla wyjaśnienia:


CAS - Compare And Swap:

CAS(M, A, B)

atomowe wykonanie sekwencji


if M = A
then
   M := B

bądź

if M = A
then
   XCHG(M, B)


bądź

if M = A
then
   M := B
else
   A := M

( tak działa CMPXCHG)

----------

DCAS - double CAS

jak wyżej, tylko dotyczy dwóch PRZYLEGŁYCH słów

if DWORD(M1, M2) = DWORD(A1, A2)
then
   DWORD(M1, M2) := DWORD(B1, B2)
else
    DWORD(A1, A2) := DWORD(M1, M2)

Tak działa CMPXCHG8B


------------

Casn

Jak wyżej, tylko dotyczy zbioru N niezależnych o siebie słów:


if {M1 .. Mn} = {A1 .. An}
then
   {M1 .. Mn} := {B1 .. Bn}
else
   {A1 .. An} := {M1 .. Mn}

W szczególności CAS2 jest szczególnym przypadkiem CASn dla n=2


Zauważ, czym CAS2 różni się od DCAS.



Przykład zastosowania:

Do wielodostępnej listy jednokierunkowej, której pierwszy element 
wskazywany jest przez TOP, dołączamy na początek nowy rekord R:

R: Record
      Next: <adres nastepnego rekordu>
    ...
    End;




A := TOP;
B := Addr(R);
R.Next := A;
CAS(TOP, A, B);

{ dlaczego nie mogę napisać CAS(TOP, R.Next , Addr(R)) ? )
Technical Details
Message-ID: <hnvg1a$7am$1@news.onet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mail
References: <hi7d3a$u60$1@news.mixmin.net> <hnlvpl$tkc$1@news.onet.pl> <hntddv$kql$1@news.mixmin.net>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mail
From: Andrzej Grażyński <grazynsk@petex.com.pl>
Newsgroups: pl.comp.lang.asm
Subject: Re: ‘lock–free’ aka
 odżywianie grupy asemblerowców :-)
Date: Fri, 19 Mar 2010 10:26:44 +0100
Organization: http://onet.pl
Lines: 114
Message-ID: <hnvg1a$7am$1@news.onet.pl>
References: <hi7d3a$u60$1@news.mixmin.net> <hnlvpl$tkc$1@news.onet.pl> <hntddv$kql$1@news.mixmin.net>
NNTP-Posting-Host: public-gprs64668.centertel.pl
Mime-Version: 1.0
X-Trace: news.onet.pl 1268990834 7510 91.94.125.152 (19 Mar 2010 09:27:14 GMT)
X-Complaints-To: niusy@onet.pl
NNTP-Posting-Date: Fri, 19 Mar 2010 09:27:14 +0000 (UTC)
User-Agent: Thunderbird 2.0.0.23 (Windows/20090812)
In-Reply-To: <hntddv$kql$1@news.mixmin.net>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit