🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

4 total messages Started by Marcin Thu, 31 May 2018 15:47
std::atomic w Visualu
#309677
Author: Marcin
Date: Thu, 31 May 2018 15:47
31 lines
1704 bytes
Hej,

Ostatnio patrzylem na implementacje std::atomic. Zrobilem sobie taka 
strukture:

struct A
{
     char c;
     int i;
     bool operator==(const A &) const { return true; }
};

i atomic do tego:

std::atomic<A> at;
A a, b;
at.compare_exchange_strong(a, b);

Okazuje sie, ze operator== nie jest uzywany. Implementacja wpada w 
specjalizacje dla size==8, pobiera adres i porownuje pamiec. Jest to 
zgodne z opisem na MSDN-ie:

https://msdn.microsoft.com/en-us/library/hh874651.aspx
"The compare_exchange_weak and compare_exchange_strong member functions 
use memcmp to determine whether two Ty values are equal. These functions 
will not use a Ty-defined operator==."

Czy to jest ok? Jesli nawet pominiemy operator== to w pamieci pomiedzy 
'c' a 'i' sa 3 bajty smieci. Wiec w ogole nie wiadomo co porowna.

Marcin
Re: std::atomic w Visualu
#309678
Author: Sebastian Biały
Date: Thu, 31 May 2018 19:08
12 lines
1301 bytes
On 5/31/2018 5:47 PM, Marcin wrote:
> will not use a Ty-defined operator==."
> Czy to jest ok?

Nie tylko visual tak ma, to raczej ogólny problem z atomic:

http://en.cppreference.com/w/cpp/atomic/atomic/compare_exchange

Tu masz kilka wyjasnień dlaczego to się nadaje do PODów i raczej niczego 
innego:

https://stackoverflow.com/questions/13885617/how-to-use-stdatomic-effectively-for-non-primitive-types
Re: std::atomic w Visualu
#309679
Author: Marcin
Date: Thu, 07 Jun 2018 20:17
26 lines
1996 bytes
W dniu 31.05.18r. o 21:08, Sebastian Biały pisze:
> On 5/31/2018 5:47 PM, Marcin wrote:
>> will not use a Ty-defined operator==."
>> Czy to jest ok?
> 
> Nie tylko visual tak ma, to raczej ogólny problem z atomic:
> 
> http://en.cppreference.com/w/cpp/atomic/atomic/compare_exchange
> 
> Tu masz kilka wyjasnień dlaczego to się nadaje do PODów i raczej niczego 
> innego:
> 
> https://stackoverflow.com/questions/13885617/how-to-use-stdatomic-effectively-for-non-primitive-types 
> 

Czemu standard mowi o memcmp? Przeciez zawsze mozna by sprawdzic czy 
jest operator== czy nie. Jezeli ma byc uzyte memcmp to ze wzgledu na 
padding to nawet z POD-ami moze byc problem. Nie lepiej by bylo uzyc 
memcmp tylko dla typow prostych? Tylko, ze wtedy by byla strata na 
POD-ach malych rozmiarow bez paddingu bo by byly jakies mutexy. Chyba 
nie da sie rozpoznac czy jest padding czy nie.

Jezeli atomic dla nie POD-ow nie ma sensu to nalezaloby tego zabronic. A 
jesli chcemy na to pozwolic to przynajmniej zrobmy to dobrze.

Marcin
Re: std::atomic w Visualu
#309680
Author: Sebastian Biały
Date: Thu, 14 Jun 2018 19:55
14 lines
1628 bytes
On 6/7/2018 10:17 PM, Marcin wrote:
> Czemu standard mowi o memcmp? Przeciez zawsze mozna by sprawdzic czy 
> jest operator== czy nie.

Ale operator to jest obcy kod. Pisany gdzie indziej. Robisz sobie, 
rozumiesz, sekcję krytyczną a tu jakiś pajac wywala exception z =. 
Troche to niebezpieczne używanie cudzego kodu diabli wiedza gdzie.

> Jezeli atomic dla nie POD-ow nie ma sensu to nalezaloby tego zabronic. A 
> jesli chcemy na to pozwolic to przynajmniej zrobmy to dobrze.

Ojtam. Napisz sobie własnego guarded< T > który będzie miał mutexa i 
tyle. Atomic ma być czymś w rodzaju bardzo niskopoziomowego narzedzia do 
wykręcania śrubek.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads