Реализация атомарных операцийQt использует оптимизацию, называемую неявным разделением данных, для многих своих классов-значений. Начиная с Qt 4, все классы Qt с неявным разделением данных могут безопасно копироваться между потоками как и любые другие классы-значения, т.е. они полностью реентерабельны. Это достигается путём реализации подсчёта операций с ссылками используя атомарные аппаратные инструкции на всех различных платформах, поддерживаемых Qt. Для поддержки новой архитектуры важно обеспечить, чтобы эти платформо-специфичные атомарные операции были реализованы в соответствующем заголовочном файле (qatomic_ARCH.h), а также чтобы этот файл располагался в каталоге Qt src/corelib/arch. Например, реализация для Intel 80386 располагается в src/corelib/arch/qatomic_i386.h. В настоящее время Qt предоставляет два класса, обеспечивающих несколько атомарных операций, QAtomicInt и QAtomicPointer. Эти классы унаследованы от QBasicAtomicInt и QBasicAtomicPointer, соответственно. При портировании Qt на новую архитектуру должны быть реализованы классы QBasicAtomicInt и QBasicAtomicPointer, не QAtomicInt и QAtomicPointer. Бывшие классы не имеют конструкторов, которые делают им структуру старых плоских данных (POD, plain-old-data). Оба класса содержат только одну переменную-член с именем _q_value, которая хранит значение. Все атомарные операции читают и модифицируют это значение. Должны быть реализованы все функции-члены, упомянутые в документации по API QAtomicInt и QAtomicPointer. Обратите внимание на то, что эти реализации атомарных операций в этих классах должны быть атомарными и для прерываний и для нескольких процессоров. Предупреждение: Классы QBasicAtomicInt и QBasicAtomicPointer, упомянутые в этом документе, используются для внутренних нужд Qt и не являются частью открытого API. В будущих версиях Qt они могут быть изменены. Целью данного документа является оказание помощи людям, интересующимся портированием Qt на новую архитектуру. |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |