One Writer Multireader

  • Автор темы Wert_Lex
  • Дата начала
W

Wert_Lex

Гость
#1
Доброго времени суток, господа.
Сразу к делу. Представим, что у нас есть переменная, скажем int i , десять потоков, которые могут прочитать ее значение и одиннадцатый, который может значение это изменить - пусть увеличить на единицу. Возникает логичный вопрос - что случится, когда выпадет момент и переменная будет одновременно читаться и писаться? Да, я знаком с мьютексами, семафорами, критическими секциями и двойной проверкой.
 

grigsoft

Well-Known Member
15.11.2005
735
0
#3
В случае одной целой переменной - ничего не случится.
 
S

Sekt

Гость
#4
Доступ к одному ресурсу одновременно - DeadLock.
P.s тут разные режимы Deadlock мало вероятен.оно может сначало прочесть а потом увеличить и наоборот
 

grigsoft

Well-Known Member
15.11.2005
735
0
#5
Sekt, что такое, по-вашему, deadlock, и от чего он происходит?
 

grigsoft

Well-Known Member
15.11.2005
735
0
#6
Wert_Lex
В худшем случае - потоки прочитают неожиданное число. Но мне кажется что и этого не будет, хотя могу и ошибаться.
 
S

Sekt

Гость
#7
grigsoft,ожидание высвобождение общего ресурса 2-мя или более потоками.
 

grigsoft

Well-Known Member
15.11.2005
735
0
#8
Sekt, здесь не будет никакого ожидания. И ожидание - это просто ожидание, не deadlock. Оффтопик, но просто к сведению: deadlock - это ситуация с 2мя и более ресурсами А,Б, когда поток 1 владеет ресурсом А и ожидает освобождения ресурса Б, а поток 2 владеет ресурсом Б, и ожидает освобождения ресурса А. Вот в такой ситуации они действительно не могут дальше двигаться.
 
W

Wert_Lex

Гость
#9
ниче вы тут нафлудили.
Допустим имеется итератор, его точное значение не настолько важно. Что случится, если два потока попытаются _ОДНОВРЕМЕННО_ считать и записать итератор.

European зачем мне нужны семафоры или критические секции, если писатель гарантировано один? Читать можно множественно одновременно.
 
W

Wert_Lex

Гость
#11
Да пофигу чего итератор. Время пусть итератор считает. От начала эпохи динозавров. int типа пусть. не важно.
 
A

alexsid

Гость
#12
Для такой тупой задачи, когда 10 потоков просто читаю переменную, а один просто пишет нет никакой разницы.
Просто, читающий поток может получить устаревшее значение. Это критично в некоторых алгоритмах...
А вообще, одновременно прочитать и записать одну переменную аппаратура не позволяет. Данный конфликт будет разрешен в последовательность (чтение-запись или запись-чтение)
 
W

Wert_Lex

Гость
#13
alexsid Спасибо, именно это и хотел услышать.
 

DarkKnight

Well-Known Member
01.08.2010
653
0
#14
Ну уж если все так нужно отследить (конечно не для такого примера с переменной как автор описал), то использоват нужно только Мютекс и Симмафор. Мютекс на ограничение читающих процессов, а симмафор чисто на запись...
Ну во всяком мне так кажется, тока примера что то использования найти не могу реального....
 
W

Wert_Lex

Гость
#15
раз уж такое дело, то гораздо выгоднее использовать критические секции, если они в языке правильно реализованы. Или synchronized из java. Так-то.