Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.047 c
2-1251565949
Student
2009-08-29 21:12
2009.10.25
Работа с сообщением wm_LButtonDblClk объект класса TShellListView


2-1251206612
Дмитрий_
2009-08-25 17:23
2009.10.25
TStrngList.AddObject..?


2-1251312234
sanx
2009-08-26 22:43
2009.10.25
TEdit, как отличить user ввод от присвоения Text нового значения?


15-1250350837
Внук
2009-08-15 19:40
2009.10.25
Я сделал это!


2-1250751050
kyn66
2009-08-20 10:50
2009.10.25
Исчезает окно предупреждения.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский