Гарантии о присвоении атомного указателя

0

Есть ли гарантия того, что присвоение переменной указателя является атомарной?

struct S {char a; int* p;};
S * p1 = new S;
S * p2 = new S;

p1 = p2;
  • 1
    Вы имеете в виду «назначение». «Аффектация» не имеет смысла в контексте программирования.
  • 0
    @SebastianRedl хах, я ответил на основе кода .... не знаю, что такое слово означает = P
Показать ещё 1 комментарий
Теги:
atomic

2 ответа

3

Нет, поэтому C++ имеет атомные типы.

  • 0
    можете ли вы аргументировать почему?
  • 0
    @ Guillaume07 Почему? это просто так, нет никаких гарантий, что у вас есть (и стоимость этого, есть плата за атомарность), у вас есть атомарность.
1

В С++ 03 таких гарантий нет, потому что язык не знает о потоках. Однако при назначении указателя Win32 гарантировано быть атомарным.

Простые чтения и записи для правильно выровненных 32-битных переменных являются атомарными операциями. Другими словами, вы не получите только одну часть обновленной переменной; все биты обновляются в атомном режиме. Однако синхронизация не гарантируется. Если два потока считывают и записывают из одной и той же переменной, вы не можете определить, будет ли один поток выполнять свою операцию чтения до того, как другой выполнит операцию записи.

Простые чтения и записи для правильно выровненных 64-битных переменных являются атомарными в 64-битной Windows. Чтение и запись в 64-битные значения не гарантируют атомарность в 32-разрядной Windows. Считывание и запись в переменные других размеров не гарантируется атомарным на любой платформе.

В С++ 11 тоже нет таких гарантий, если не используется std :: atomic.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню