Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.25;
Скачать: CL | DM;

Вниз

Для изменения 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.022 c
2-1251882705
sanx
2009-09-02 13:11
2009.10.25
Получить от компилятора текущую дату в констатнту, как?


15-1251484795
DeadMeat
2009-08-28 22:39
2009.10.25
Windows 7 и перезапись EXE файлов


15-1251452949
xayam
2009-08-28 13:49
2009.10.25
Подскажите есть ли для php библиотека для роботы с д-ми Word .doc


15-1250095032
Григорьев Антон
2009-08-12 20:37
2009.10.25
Осторожно! Новый вирус, специфичный для Delphi


2-1251107999
ford
2009-08-24 13:59
2009.10.25
AnsiString