Безопасность memcpy () для смежных области памяти

Недавно я задал вопрос о использовании volatile , и мне было предложено прочитать несколько очень информативных статей от Intel и других, в которых обсуждаются барьеры памяти и их использование . Однако после прочтения этих статей я стал довольно параноиком.

У меня 64-битная машина. Безопасно ли использовать memcpy в соседнем, неперекрывающиеся области памяти из нескольких потоков? Например, скажем, у меня есть буфер:

char buff[10];

Всегда ли безопасно для одного потока использовать memcpy в первые 5 байтов, а второй поток копирует в последние 5 байтов?

Моя внутренняя реакция ( и несколько простых тестов) показывают, что это полностью безопасно, но мне не удалось найти документацию, которая могла бы меня полностью убедить. {если (p == null) возврат; } Как мне заменить это контрактом кода? Мне интересно узнать, был ли передан null и ...

В моем коде я часто делаю это:

myfunction (parameter p)
{
  if(p == null)
   return;
}

Как мне заменить это контрактом кода?

Мне интересно в выяснении того, был ли передан нуль и был ли он обнаружен статической проверкой.

Я заинтересован в том, чтобы генерировалось исключение контракта, если во время нашего тестирования было передано значение null

Для производства я хочу выйти из функции.

Могут ли кодовые контракты вообще это делать? Это хорошее применение для кодовых контрактов?

6
задан Dariusz Woźniak 8 September 2014 в 22:25
поделиться