Форум: "Начинающим";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];
ВнизДля изменения boolean в мультипотокс нужны атомарные операции? Найти похожие ветки
← →
sanx (2009-08-29 02:54) [0]Думаю что разные lock... команды лишние, все равно ведь нужен или 0 или не ноль. Так ли это?
← →
DrPass © (2009-08-29 03:08) [1]В типичном случае изменение булевой переменной - атомарная операция, и в синхронизации не нуждается. А так, мало ли какую логику ты там дальше наворачиваешь...
← →
sanx (2009-08-29 03:56) [2]DrPass, спс, ответ по существу. Да, я имел ввиду просто операцию по изменению, которые болжны по идее откомпилироватся в mov *, 0 или mov *, not 0. Конечно если пытаться изменять false/true не простым присвоением а командами типа dec/inc/add то да, тут могут быть сложности :)
← →
Sha © (2009-08-29 10:19) [3]> Для изменения boolean в мультипотокс нужны атомарные операции?
Нет, не требуется.
В IA-32 запись или чтение байта/слова/двойного слова,
не выходящие за границы выровненного двойного слова,
всегда атомарны.
Обычно надо не только атомарно установить значение переменной в памяти,
а сделать еще что-то. Вот как раз с этим и могут быть проблемы :)
← →
Sha © (2009-08-29 10:32) [4]Замечание.
[3] верно для всех процессоров, начиная с Pentium.
Для младших моделей (386 и 486) операции атомарны
только в случае выравнивания на соответствующую границу.
← →
Anatoly Podgoretsky © (2009-08-29 10:36) [5]> Sha (29.08.2009 10:32:04) [4]
И для 386SX это справедливо тоже?
← →
DVM © (2009-08-29 10:58) [6]
> > Для изменения boolean в мультипотокс нужны атомарные операции?
>
>
> Нет, не требуется.
>
Может лучше не искушать судьбу и всегда делать синхронизацию доступа.
← →
Sha © (2009-08-29 10:59) [7]Том 3А от Интел, п 8.1.1, "Гарантированно атомарные операции"
описывает поведение процессоров, начиная с 486.
Насколько помню, с атомарностью у 386 и 486 все одинаково.
Насчет SX не уверен, там же шина 16 бит.
← →
Sha © (2009-08-29 11:05) [8]> DVM © (29.08.09 10:58) [6]
> Может лучше не искушать судьбу и всегда делать синхронизацию доступа.
Автор ведет речь только об атомарном присваивании значения булевской переменной.
О синхронном доступе к памяти речи пока нет, на что я ему намекнул в [3].
← →
Anatoly Podgoretsky © (2009-08-29 12:31) [9]> Sha (29.08.2009 10:59:07) [7]
> там же шина 16 бит.
Вот поэтому и спрашиваю.
← →
Sha © (2009-08-29 12:35) [10]Думаю, автор топика понимает, что
не всякое атомарное присваивание значения переменной в одном потоке станет тут же заметно в других потоках.
← →
Sha © (2009-08-29 12:40) [11]> Anatoly Podgoretsky © (29.08.09 12:31) [9]
В мануале по 386 на этот счет нет ни слова
http://microsym.com/editor/assets/386intel.pdf
← →
Anatoly Podgoretsky © (2009-08-29 12:47) [12]> Sha (29.08.2009 12:40:11) [11]
Я предполагаю, что не является, а в руководстве ни слова, потому что в то время никто не заморачивался подобным.
Хотя если судить по прерываниям, то гарантируется выполнение команды до конца, кажется кроме случаев аггрегатных комманд, например с префиксом REP
← →
Sha © (2009-08-29 13:01) [13]> Anatoly Podgoretsky © (29.08.09 12:47) [12]
> Я предполагаю, что не является
Скорее всего
← →
sanx (2009-08-29 13:40) [14]Спс за ответы :) Да я просто уже задолбался эту синхронизацию делать, а тут флаг один понадобился. По сути его устанавливает или сбрасывает пользователь. Потоки же просто читают его значение. Думаю что если какой-то поток не успеет впоймать изменение, то ничего страшного :) Даже если нужно выравнивание и компилятор хранит boolean в 4 байтах, хотя вроде в 1-ом должен, то все равно важен один лишь младший байт. Причем идет запись константы, и не каких арифметических операций. Значит должно все быть нормально :)
← →
DrPass © (2009-08-29 14:03) [15]
> Anatoly Podgoretsky © (29.08.09 10:36) [5]
>
> И для 386SX это справедливо тоже?
У нормальных пользователей 386SX булевский тип был 16-битным :)
← →
Sha © (2009-08-29 14:09) [16]> sanx (29.08.09 13:40) [14]
> компилятор хранит boolean в 4 байтах, хотя вроде в 1-ом должен,
хранит в одном
← →
Anatoly Podgoretsky © (2009-08-29 16:05) [17]> DrPass (29.08.2009 14:03:15) [15]
Не про булевский тип мы говорим, ты видимо выпал из контексту, "выравненый на границу двойного слова".
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.05 c