ПК
Size: a a a
ПК
LA
m
write_x
read_x_then_y
write_y
read_y_then_x
read_x_then_y не будет инкрементить.LA
write_x
read_x_then_y
write_y
read_y_then_x
read_x_then_y не будет инкрементить.join()-а в этой книге некорректно. join() был именно таким, никакой гонки не было бы и запись true в обе переменные произошла бы до чтения. Впрочем, да, спишем всё на гонкуПК
join()-а в этой книге некорректно. join() был именно таким, никакой гонки не было бы и запись true в обе переменные произошла бы до чтения. Впрочем, да, спишем всё на гонкуПК
std::thread при выходе из скоупа"ПК
S
std::type_index.std::type_index нельзя, он AFAIK только в 11ом появился)typeid() тоже не работает)template<typename T> struct TypeInfo { static void get() {} };.__PRETTY_FUNCTION__ который сгенерит строку для нее + адрес на эту строку. AFAIK именно этот трюк используется в boost:typeindex для ctti.ПК
std::type_index.std::type_index нельзя, он AFAIK только в 11ом появился)typeid() тоже не работает)template<typename T> struct TypeInfo { static void get() {} };.__PRETTY_FUNCTION__ который сгенерит строку для нее + адрес на эту строку. AFAIK именно этот трюк используется в boost:typeindex для ctti.S
ПК
ПК
ПК
ПК
ПК
AK
std::type_index.std::type_index нельзя, он AFAIK только в 11ом появился)typeid() тоже не работает)template<typename T> struct TypeInfo { static void get() {} };.__PRETTY_FUNCTION__ который сгенерит строку для нее + адрес на эту строку. AFAIK именно этот трюк используется в boost:typeindex для ctti.S
std::any в gcc - там именно такой подход и используется в кишках std::any_cast. У каждого типа есть статический метод _S_manage, каждый std::any хранит его как _M_manager, в кишках std::any_cast они сравниваются.S
getTypeInfo<T>() он увеличивается и сохраняется в другую статическую переменную для этого TS
ПК
std::any в gcc - там именно такой подход и используется в кишках std::any_cast. У каждого типа есть статический метод _S_manage, каждый std::any хранит его как _M_manager, в кишках std::any_cast они сравниваются.