Я читал принципы операционной системы Абрахимом, Галвином. В процессе синхронизации темы, следующее определение даются для функции TestAndSet, которая впоследствии используется для обеспечения взаимного исключения:Процесс Синхронизация-TestAndSetLock
boolean TestAndSet(boolean *target) {
boolean rv = *target;
*target = TRUE;
return rv;
}
Он упоминается в книге, что эта инструкция является специальной инструкцией аппаратной и выполняются атомарно. Мой вопрос: как это реализовать в C? Должен ли я предоставить его определение так же, как и для других пользовательских функций, или мне нужно импортировать некоторую библиотеку, которая уже реализует это? Если случай является прежним, и я сам определяю функцию, какова гарантия того, что она будет выполнена атомарно?
Под словом «атомно» я понимаю, что он будет выполняться как одна команда, т. Е. Если два процесса вызовут эту функцию, вызываемые функции будут выполняться последовательно, а их утверждения не будут чередоваться (даже после преобразования для машинного языка).
Пожалуйста, помогите. У меня много трудностей в понимании текста этой книги.
Такая функциональность предоставляется ABI и ОС, а не напрямую. C. Перед тем, как приблизиться к инструкциям intercore-lock, доступным на вашем процессоре, проверьте свой API. –
http://stackoverflow.com/questions/2287451/how-to-perform-atomic-operations-on-linux-that-work-on-x86-arm-gcc-and-icc – kaylum