Очевидный и предположительно предполагаемый ответ уже дан Хоббсом и jkerian:
- образец Высокий
- образец Низкий
- снова прочитайте Высокий - если он отличается отпример из шага 1, вернитесь к шагу 1
На некоторых аппаратных средствах с несколькими процессорами и ядрами это на самом деле не работает должным образом. Если у вас нет барьера памяти для обеспечениячто вы не читаете High и Low из кеша вашего собственного ядра, тогда обновления из другого ядра - даже если 64-разрядная атомарная и сброшена в некоторую разделяемую память - гарантированно не будут видны в вашем ядресвоевременная мода.Хотя High
и Low
должны быть volatile
-качественными, этого не достаточно.
Чем выше частота обновлений, тем вероятнее и значительнее ошибки, связанные с этимпроблема.
Нет портативного способа сделать это без некоторых оболочек C для OS / CPU-специфичных барьеров памяти, мьютексов, атомарных операций и т. д.
В комментариях Брукса ниже упоминаетсячто это работает для определенных процессоров, таких как современные AMD.