🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #267848

Re: Ciemna strona C++

#267848
From: Sektor van Skijlen
Date: Thu, 06 Dec 2007 16:10
78 lines
4505 bytes
Dnia Wed, 05 Dec 2007 18:30:27 +0100, Sebastian Kaliszewski skrobie:
> Sektor van Skijlen wrote:
> >>>>Rozumiem, że chodzi o volatile z Dżawy, nie to cóś z C/C++.
> >>>
> >>>Ależ oczywiście, że chodzi o oba. Zresztą znaczenie 'volatile' w Javie i w C++
> >>>jest identyczne (jeśli oczywiście uwzględnimy fakt, że gcc ma rozszerzenie w
> >>>stosunku do standardu, co pozwala zmiennym oznaczonym volatile pracować
> >>>poprawnie z posix threads).
> > 
> > 
> >>Jakie rozszerzenie GCC? Nie słyszałem o nim. Na pewno nie jest tak
> >>domyślnie (nawet przy kompilacji z -pthread).
> > 
> > 
> > Ależ oczywiście, że jest tak domyślnie - obiekty oznaczone jako volatile są
> > modyfikowane od razu w każdym wątku.

> Sektor, czy ty wogóle wiesz o czym ty mówisz??? Mam wrażenie, że nie masz 
> bladego pojęcia.

Mam - i zgadłeś, że blade.

> Wiesz co to jest coś takiego, jak memory ordering? Wiesz co to jest memory 
> barrier (znane czasem jako memory fence)? Co to jest acquire semantics, co 
> to release semantics?

Oczywiście, że wiem. W przypadku mojej aplikacji jednak nie ma to akurat
żadnego znaczenia - każda dana volatile ma swoje niezależne znaczenie i fakt,
że jedna została dosynchronizowana, a druga nie, nie ma żadnego znaczenia. Że
mi się pojawi aktualna wartość grubo po tym - mnie to wali. To zmienia tylko i
wyłącznie relatywistyczne zależności czasowe między wątkami (wydaje się, że
wuykonywały się w innych strefach czasowych, niż miało to faktycznie miejsce).

> Wiesz, że jak masz dwa procesory to w wielu architekturach poniższy kod może 
> wypisać 0? Nawet w GCC.


> volatile sig_atomic_t a = 0;
> volatile sig_atomic_t b = 0;

> void thread_a()
> {
>    while(true)
>    {
>      if(a != 0) // tu czytamy a (najpierw)
>      {
>        int v = int(b); // tu czytamy b (potem)
>        std::cout << v; // niespodzianka :)
>        return;
>      }
>    }
> }

> void thread_b()
> {
>    sleep(13);
>    b = 1; // tu zapisujemy b (najpierw)
>    a = 1; // tu zapisujemy a (potem)
> }

> int main()
> {
>     launch_thread(&thread_b);
>     launch_thread(&thread_a);
> }


> Ponieważ w GCC volatile nie ma memory barrier to jeden procesor może widzieć 
> zapisy w innej kolejności niż się faktycznie wydarzyły.

Super. A co MA memory barrier?


-- 
//  _    ___         Michal "Sektor" Malecki <sektor(whirl)kis.p.lodz.pl>
\\ L_ |/ `|  /^\ ,()                         <ethouris(O)gmail.com>
// \_ |\  \/ \_/ /\ C++ bez cholesterolu: http://www.intercon.pl/~sektor/cbx
"Java is answer for a question that has never been stated"
Technical Details
Message-ID: <fj96ug$7e4$3@kujawiak.man.lodz.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!feed.news.interia.pl!news.nask.pl!news.nask.org.pl!news.man.lodz.pl!not-for-mail
References: <fghgeo$spf$1@nemesis.news.tpi.pl> <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl> <fh2lj6$qkh$1@news.vectranet.pl> <fha3as$pap$1@bozon2.softax.pl> <fhaj8u$e02$1@news.vectranet.pl> <fhf09d$ohq$1@bozon2.softax.pl> <fhfi9l$640$1@news.vectranet.pl> <fhurmu$5d9$1@bozon2.softax.pl> <fhv020$8k1$1@news.vectranet.pl> <fi1bs4$nn3$1@bozon2.softax.pl> <fi27ds$gt1$1@kujawiak.man.lodz.pl> <fi458p$fmv$1@bozon2.softax.pl> <fi9ckc$2u5$1@kujawiak.man.lodz.pl> <fimb7n$80v$1@bozon2.softax.pl> <fj5k6j$r3e$1@kujawiak.man.lodz.pl> <1196847281.22322.24.camel@qrnik> <fj6in8$mij$2@kujawiak.man.lodz.pl> <fj6m8p$b7e$1@bozon2.softax.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!feed.news.interia.pl!news.nask.pl!news.nask.org.pl!news.man.lodz.pl!not-for-mail
From: Sektor van Skijlen <ethouris@guess.if.gmail.com.is.valid.or.invalid>
Newsgroups: pl.comp.lang.c
Subject: Re: Ciemna strona C++
Date: Thu, 6 Dec 2007 16:10:56 +0000 (UTC)
Organization: LODMAN - Metropolitan Area Network in LODZ, Poland
Lines: 78
Sender: Michal Malecki <sektor@student.kis.p.lodz.pl>
Message-ID: <fj96ug$7e4$3@kujawiak.man.lodz.pl>
References: <fghgeo$spf$1@nemesis.news.tpi.pl> <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl> <fh2lj6$qkh$1@news.vectranet.pl> <fha3as$pap$1@bozon2.softax.pl> <fhaj8u$e02$1@news.vectranet.pl> <fhf09d$ohq$1@bozon2.softax.pl> <fhfi9l$640$1@news.vectranet.pl> <fhurmu$5d9$1@bozon2.softax.pl> <fhv020$8k1$1@news.vectranet.pl> <fi1bs4$nn3$1@bozon2.softax.pl> <fi27ds$gt1$1@kujawiak.man.lodz.pl> <fi458p$fmv$1@bozon2.softax.pl> <fi9ckc$2u5$1@kujawiak.man.lodz.pl> <fimb7n$80v$1@bozon2.softax.pl> <fj5k6j$r3e$1@kujawiak.man.lodz.pl> <1196847281.22322.24.camel@qrnik> <fj6in8$mij$2@kujawiak.man.lodz.pl> <fj6m8p$b7e$1@bozon2.softax.pl>
NNTP-Posting-Host: student.kis.p.lodz.pl
Mime-Version: 1.0
X-Trace: kujawiak.man.lodz.pl 1196957456 7620 212.191.89.21 (6 Dec 2007 16:10:56 GMT)
X-Complaints-To: abuse@man.lodz.pl
NNTP-Posting-Date: Thu, 6 Dec 2007 16:10:56 +0000 (UTC)
User-Agent: tin/1.8.3-20070201 ("Scotasay") (UNIX) (FreeBSD/6.2-RELEASE-p3 (sparc64))
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit