Thread View: pl.comp.lang.c
4 messages
4 total messages
Started by Marcin
Thu, 31 May 2018 15:47
std::atomic w Visualu
Author: Marcin
Date: Thu, 31 May 2018 15:47
Date: Thu, 31 May 2018 15:47
31 lines
1704 bytes
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
Author: Sebastian Biały
Date: Thu, 31 May 2018 19:08
Date: Thu, 31 May 2018 19:08
12 lines
1301 bytes
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
Author: Marcin
Date: Thu, 07 Jun 2018 20:17
Date: Thu, 07 Jun 2018 20:17
26 lines
1996 bytes
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
Author: Sebastian Biały
Date: Thu, 14 Jun 2018 19:55
Date: Thu, 14 Jun 2018 19:55
14 lines
1628 bytes
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