Я не могу найти ответы на следующие вопросы:
Существует мнение, что если атомарные объекты имеют неверное выравнивание, то такие объекты теряют свою атомарность. Объяснений, почему это происходит, я не нашел. И даже не нашел объяснений, всегда ли это происходит, или только в том случае, если атомарный объект оказывается на границе двух кешлиний.
Существует мнение, что несинхронизованное изменение неатомарной переменной из разных потоков может приводить не только к нарушению порядка изменения этой переменной, но и к тому, что в переменной окажется сломанное значение. Например, один поток запишет одну половину значения, а другой - другую. Это объяснение кажется правдоподобным, но лишь в отрыве от специфики синхронизации данных между ядрами/процессорами. Насколько мне известно, обычно мельчайшей единицей синхронизации между ядрами/процессорами является кэшлиния, размер которой, как правило, составляет 64 байта. Поэтому, мне не ясно, как многобайтовая переменная может сломаться, если она целиком попадает в одну кэшлинию.
Я буду очень благодарен за любую информацию по этим двум вопросам. Заранее, спасибо.
В С++ есть стандарт, и там написано что
1) все объекты должны быть выравнены, иначе поведение не определено
2) при гонках поведение не определено
Если вы используете невыравненные переменные, или если у вас гонки, читайте документацию процессора.
Например, в доках Интела, том 3A, глава 8.1.1 Guaranteed Atomic Operations:
The P6 family processors (and newer processors since) guarantee that the following additional memory operation will always be carried out atomically:
• Unaligned 16-, 32-, and 64-bit accesses to cached memory that fit within a cache line.
У других процессоров может быть другое поведение. Также оптимизатор С++ опирается на стандарт, а не на архитектуру процессора, и может выкинуть ваш нестандартный код.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Реализую библиотеку по обработки данных с устройства, в последствии количество устройств будет наращиваться и я пишу гибкое решениеУ меня...
Проблема возникает на этапе чтения из файла, так как я открыл файл hex редактором, и в нем число естьЧто я делаю не так?
Я написал программу и начал проверять ееУ нее стоит условие, что время выполнения меньше 1 секунды