@Bernard:
я должен признать, большая часть Вашего примера пошла прямо по моей голове. Это действительно компилирует и, кажется, работает, все же. Действительно ли это безопасно для систем SMP или SpeedStep?
Это - хороший вопрос... Я думаю код хорошо. С практической точки зрения мы используем его в моей компании каждый день, и мы работаем на довольно огромном количестве полей, всего от 2-8 ядер. Конечно, YMMV, и т.д., но это, кажется, надежное и низкие издержки (потому что это не превращает контекстное переключение в системное пространство), метод синхронизации.
Обычно то, как это работает:
Определенные примечания:
выполнение с изменением последовательности может вызвать неправильные результаты, таким образом, мы выполняем "cpuid" инструкцию, которая в дополнение к предоставлению Вам некоторая информация о CPU также синхронизирует любое неисправное выполнение инструкции.
Большая часть ОС синхронизирует счетчики на центральных процессорах, когда они запускают, таким образом, ответ хорош к в течение нескольких наносекунд.
бывший в спящем режиме комментарий, вероятно, верен, но на практике Вы, вероятно, не заботитесь о синхронизациях через границы спящего режима.
относительно speedstep: Более новый Intel CPUs компенсирует скорость, изменяет и возвращает скорректированное количество. Я сделал быстрое сканирование по некоторым полям в нашей сети и нашел только одно поле, которое не имело ее: Pentium 3, выполняющий некоторый старый сервер базы данных. (это поля Linux, таким образом, я сверился: grep constant_tsc/proc/cpuinfo)
я не уверен в центральных процессорах AMD, мы - прежде всего, магазин Intel, хотя я знаю, что некоторые наши системные гуру низкого уровня сделали оценку AMD.
Hope это удовлетворяет Ваше любопытство, это - интересное и (по моему скромному мнению) под - изученная область программирования. Вы знаете, когда Jeff и Joel говорили о том, должен ли программист знать C? Я кричал на них, "эй забудьте, что высокоуровневый C материал... ассемблер - то, что необходимо изучить, хотите ли Вы знать то, что делает компьютер!"
Вы можете использовать T4ScriptFileGenerator из T4Toolbox в качестве специального инструмента для вашего XML-файла. Допустим, у вас есть файл Test.XML в вашем проекте с помощью этого настраиваемого инструмента. При первом сохранении Test.XML этот специальный инструмент создает новый файл Test.tt. Вы можете разместить здесь свою логику генерации кода (или #include другие ваши файлы .tt). В следующий раз, когда вы сохраните Test.XML, он преобразует (сгенерирует код) существующий Test.tt.