• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

One Writer Multireader

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

Wert_Lex

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

grigsoft

В случае одной целой переменной - ничего не случится.
 
S

Sekt

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

grigsoft

Sekt, что такое, по-вашему, deadlock, и от чего он происходит?
 
G

grigsoft

Wert_Lex
В худшем случае - потоки прочитают неожиданное число. Но мне кажется что и этого не будет, хотя могу и ошибаться.
 
S

Sekt

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

grigsoft

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

Wert_Lex

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

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

Wert_Lex

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

alexsid

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

Wert_Lex

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

DarkKnight

Ну уж если все так нужно отследить (конечно не для такого примера с переменной как автор описал), то использоват нужно только Мютекс и Симмафор. Мютекс на ограничение читающих процессов, а симмафор чисто на запись...
Ну во всяком мне так кажется, тока примера что то использования найти не могу реального....
 
W

Wert_Lex

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!