Я новичок в атомарных типах C ++ и пытаюсь преобразовать некоторый последовательный код в многопоточную версию.
1) У меня есть несколько классов, которые в основном являются псевдонимами для типов машин, но со связанными функциями и перегруженными операторами, которые позволяют мне обрабатывать эти типы, как будто они являются чем-то более сложным, например:
class myClass{
atomic_ullong x;
public:
void myClassFunc(atomic_ullong mask){x &= mask;}
bool operator < (const myClass &in){ return (x & 0xFFFFFFFFFFFFFC00) < (in.x & 0xFFFFFFFFFFFFFC00);}
};
Достаточно ли будет простого объявления членов класса и параметров функции в качестве их атомарных эквивалентов типа, как я уже говорил выше?Или заставит меня обернуть x как «myClass», чтобы начать использовать мьютексы и тому подобное?
2) Если это работает, в некоторых случаях у меня есть более сложный код с более чем одним членом класса.В этих случаях, если все эти члены являются базовыми типами машин (целочисленными и т. Д.), Могу ли я сделать тот же трюк и сохранить все преимущества атомарных типов?
Конечно, я могу реструктурировать свой код здесь, ноявные классы делают это намного проще и не позволяют мне случайно что-то делать с элементами хранимых данных, что мне не следует.
Не то чтобы это важно, но я делаю отладочную компиляцию в Visual Studio 2008 и производственную компиляцию вGCC.Я загружаю VC2019, поскольку мы говорим о поддержке C ++ 11 и выше.Ранее я использовал библиотеки Boost для многопоточных приложений.