Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

thread-safe ли? - C++

27.08.2013, 07:38. Просмотров 531. Ответов 8
Метки нет (Все метки)

Насколько я понимаю, для х32 процессоров атомарными операциями не являются те, что с double/long long, для х64 же и они атомарны. Если я прав, то будет ли thread-safe данная ситуация на х32:
Имеем глобальную переменную long long-типа, скажем X. Она инициализирована 23 по умолчанию. Имеем два потока потока с while(true):
- один производит некоторые вычисления, используя значения этой переменной, не меняя её при этом;
- второй каждый раз присваиваем X число 23, не используя его больше нигде.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
long long X = 23;
...
/*thread1*/
void t1(void* param)
{
...
if (X == 23)
{
// do something
}
}
...
/*thread2*/
void t2(void* param)
{
...
X = 23;
...
}
А может, она даже на х64 не будет thread-safe?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2013, 07:38     thread-safe ли?
Посмотрите здесь:

Секундомер и thread-safe - C++
В моей программе мне нужно отслеживать время по секундам. Я сделал следующее: создал доп. поток, в котором вызывается методом с телом: ...

Vector и thread-safe - C++
Как лучше сделать свой класс типа контейнер шаблонный как вектор который будет ещё и thread-safe. Допустим есть обычный класс внутри вектор...

Что такое thread safe? - C++
Всем добрый день! Вопрос, собственно, в имени темы.:) Что это такое? Я так понимаю, что переменная не меняет значения при...

Thread-safe smart pointer - C++
Нужно мне это для реализации COW механизма. В STL, насколько я понимаю, shared_ptr такого не может дать. Однако, покопавшись в...

Thread-safe ли чтение структур? - C++
Собственно, безопасно ли нескольким потокам одновременно читать значение глобальной переменной, если она не влазит в примитивный тип?

C++11. thread, mutex, thread-safety - C++
есть функция, которая стартует 2 потока: для отлова нажатия клавиш и для выполнения действий void Trainer::start() { const HANDLE...

Thread - C++
Доброго времени суток господа! Вопрос в коде в комментариях. #include <iostream> #include <thread> enum { DELAY = 5 }; bool...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexcoder
1461 / 675 / 88
Регистрация: 03.06.2009
Сообщений: 3,502
Завершенные тесты: 1
27.08.2013, 08:31     thread-safe ли? #2
ИМХО, атомарность операции не гарантируется.
Кроме того, даже в коде для x32
C++
1
2
int x=23;
x++;
может быть не атомарной!
компилятор не гарантирует компиляцию этой команды в
Assembler
1
inc [x]
вполне может быть сгенерирован код
Assembler
1
2
3
mov eax,[x]
add eax,1
mov [x],eax
Пруфы в интернете были с разбором данной ситуации.
Думаю аналогичная ситуация складывается и с х64. Повторяю, ИМХО.
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
27.08.2013, 09:02     thread-safe ли? #3
да, нигде в стандарте не описано что операции с этими типами атомарны.
можно попробовать std::atomic<long long>::is_lock_free. Раз без блокировок - значит
операции атомарно выполняются. Но 100% гарантии что это именно так я дать не могу.
Нужно в доках инфу искать.
Если вы будете работать с std::atomic<xxx> - то должно быть thread-safe.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
27.08.2013, 09:09     thread-safe ли? #4
Цитата Сообщение от DU Посмотреть сообщение
да, нигде в стандарте не описано что операции с этими типами атомарны
Зато в стандарте описано, что отсутствие синхронизации при доступе к разделяемому ресурсу есть неопределенное поведение
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
27.08.2013, 09:53  [ТС]     thread-safe ли? #5
alexcoder, DU, fasked, окей, тогда если вернуться к начальному вопросу, то будет ли атомарность в данном случае? Ведь по сути, даже если операция не атомарна, X нигде не меняется (оно было равно 23, так и пишут в неё 23)?
Убежденный
Системный программист
Эксперт С++
15246 / 6878 / 1092
Регистрация: 02.05.2013
Сообщений: 11,254
Завершенные тесты: 1
27.08.2013, 10:03     thread-safe ли? #6
Цитата Сообщение от nexen Посмотреть сообщение
- один производит некоторые вычисления, используя значения этой переменной, не меняя её при этом;
- второй каждый раз присваиваем X число 23, не используя его больше нигде.
В чем смысл ? Значение переменной не меняется, выходит и конкуренции за нее нет.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
27.08.2013, 10:22  [ТС]     thread-safe ли? #7
Убежденный, опустил смысл, чтобы вникать не нужно было и привел лишь то, в чем вопрос.
А значение переменной меняется, просто на то же самое. А так как присваивание, как сказали мсье выше, не гарантировано атомарная операция, то.. Да и тут long long на x32, точно не атомарная
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,189
Завершенные тесты: 1
27.08.2013, 12:45     thread-safe ли? #8
Цитата Сообщение от nexen Посмотреть сообщение
Да и тут long long на x32, точно не атомарная
Не надо так сразу тоже... Есть simd инструкции, есть cmpxchg8b.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2013, 15:40     thread-safe ли?
Еще ссылки по теме:

Thread class - C++
В библиотеке SDL есть функция: SDL_Thread *SDL_CreateThread(int (*fn)(void *), void *data); Эта функция запускает в отдельном потоке...

Thread в объекте - C++
Добрый вечер, вопрос следующий: Создать класс, реализующий функционал создания/остановки нити исполнения, ошибка: cannot convert...

библиотека thread - C++
компилятор не видит эту библиотеку что делать?

std::thread - C++
Возник вопрос: как создать массив потоков (точнее, как его инициализировать). То есть, мне нужно примерно такое: std::thread...

Массив потоков <thread> - C++
Последний раз потоки писал на C под Linux. И там прокатывала такая штука thread a; for(int i=0;i&lt;n;i++) a_create(тряляля); for(int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Убежденный
Системный программист
Эксперт С++
15246 / 6878 / 1092
Регистрация: 02.05.2013
Сообщений: 11,254
Завершенные тесты: 1
27.08.2013, 15:40     thread-safe ли? #9
Цитата Сообщение от nexen Посмотреть сообщение
Да и тут long long на x32, точно не атомарная
В данном случае это не имеет никакого значения.
Yandex
Объявления
27.08.2013, 15:40     thread-safe ли?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru