Вниз
Скачать: CL | DM;

Корректность считывания переменной из потоков   Найти похожие ветки 

← →
Добежал   (2008-12-10 17:23) [0]

Допустим, имеем некоторый флаг boolean и его значение устанавливается где-то в других потоках, когда устанавливается/меняется - неизвестно.

Корректно ли в потоке напрямую считывать значение этой переменной? Аля:

if bPlaySound then PlaySound;

Не может ли это каким-либо образом нарушить корректность присвоения переменной в другом потоке (который возможно устанавливает значение как раз в момент проверки условия)? По идее не должно, но что-то вдруг подумалось, мало ли что...


← →
Сергей М. ©   (2008-12-10 17:26) [1]

Корректно.


← →
Добежал   (2008-12-17 13:30) [2]

спасибо, так и думал.... Впрочем до сих пор сомнения остались ;))))


← →
Ega23 ©   (2008-12-17 13:32) [3]

Читать можно без проблем. Скажем, это идеологически и эстетически не очень хорошо, но - можно. А вот писать уже нельзя.


← →
Alkid   (2008-12-17 13:58) [4]


> Ega23 ©   (17.12.08 13:32) [3]

Гм. На самом деле, если операция присвоения булевского значения атомарна - то можно. Да и вообще всё сильно зависит от задачи.


← →
clickmaker ©   (2008-12-17 14:09) [5]

авторы языков Си и С# придумали спецслово volatile. Для переменных, измененяемых разными потоками, чтобы предотвратить вредную в данном случае оптимизацию


← →
Добежал   (2008-12-17 16:30) [6]


> Читать можно без проблем. Скажем, это идеологически и эстетически
> не очень хорошо, но - можн


ну почему нехорошо. Просто не хочется считывание переменной также обращать в критическую секцию.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.012 c
3-1214849398
arturich
2008-06-30 22:09
2009.02.15
Соединение с Oracle через Database Explorer


2-1209619132
FoxikM
2008-05-01 09:18
2009.02.15
Как копировать файлы с "неправильным" именем


2-1230627520
LDV
2008-12-30 11:58
2009.02.15
SystemMenu


2-1231191483
ply
2009-01-06 00:38
2009.02.15
Символ переноса строки в Hint


15-1229592896
@!!ex
2008-12-18 12:34
2009.02.15
Кто исполнитель??




   Наверх