MSVC 14.38.33130: Есть ли ошибка в std::atomic_ref::is_lock_free? Он возвращает true для структуры размером 1024 байта.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 MSVC 14.38.33130: Есть ли ошибка в std::atomic_ref::is_lock_free? Он возвращает true для структуры размером 1024 байта.

Сообщение Anonymous »

Я обнаружил подозрительное поведение функции std::atomic_ref::is_lock_free() в компиляторе C++ Microsoft Visual Studio (версия MSVC 14.38.33130). Метод возвращает true для очень большой структуры (1024 байта), что категорически противоречит ожиданию того, что такие большие типы не могут быть заблокированы в архитектуре x86-64. Изучив исходный код стандартной библиотеки MSVC, я считаю, что обнаружил потенциальную ошибку в реализации is_lock_free().
Минимальный воспроизводимый пример (соблюдение требований с использованием C++ 20)

Код: Выделить всё

#include 
#include 
#include 
int main() {
union LargeStruct {
char data[1024];
int value;
void operator+(int value) {
this->value += value;
}
};
LargeStruct largeStruct;
memset(&largeStruct, 0, sizeof(largeStruct));

std::atomic_ref atomic_struct(largeStruct);
std::atomic_ref atomic_struct2(largeStruct);

static_assert(sizeof(LargeStruct) > 8, "LargeStruct size should be larger than 8 bytes for this test.");
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79818532/msvc-14-38-33130-does-stdatomic-refis-lock-free-have-a-bug-it-returns-true[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»