One Writer Multireader

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

Wert_Lex

Доброго времени суток, господа.
Сразу к делу. Представим, что у нас есть переменная, скажем int i , десять потоков, которые могут прочитать ее значение и одиннадцатый, который может значение это изменить - пусть увеличить на единицу. Возникает логичный вопрос - что случится, когда выпадет момент и переменная будет одновременно читаться и писаться? Да, я знаком с мьютексами, семафорами, критическими секциями и двойной проверкой.
 
В случае одной целой переменной - ничего не случится.
 
Доступ к одному ресурсу одновременно - DeadLock.
P.s тут разные режимы Deadlock мало вероятен.оно может сначало прочесть а потом увеличить и наоборот
 
Sekt, что такое, по-вашему, deadlock, и от чего он происходит?
 
Wert_Lex
В худшем случае - потоки прочитают неожиданное число. Но мне кажется что и этого не будет, хотя могу и ошибаться.
 
grigsoft,ожидание высвобождение общего ресурса 2-мя или более потоками.
 
Sekt, здесь не будет никакого ожидания. И ожидание - это просто ожидание, не deadlock. Оффтопик, но просто к сведению: deadlock - это ситуация с 2мя и более ресурсами А,Б, когда поток 1 владеет ресурсом А и ожидает освобождения ресурса Б, а поток 2 владеет ресурсом Б, и ожидает освобождения ресурса А. Вот в такой ситуации они действительно не могут дальше двигаться.
 
ниче вы тут нафлудили.
Допустим имеется итератор, его точное значение не настолько важно. Что случится, если два потока попытаются _ОДНОВРЕМЕННО_ считать и записать итератор.

European зачем мне нужны семафоры или критические секции, если писатель гарантировано один? Читать можно множественно одновременно.
 
итератор чего?
 
Да пофигу чего итератор. Время пусть итератор считает. От начала эпохи динозавров. int типа пусть. не важно.
 
Для такой тупой задачи, когда 10 потоков просто читаю переменную, а один просто пишет нет никакой разницы.
Просто, читающий поток может получить устаревшее значение. Это критично в некоторых алгоритмах...
А вообще, одновременно прочитать и записать одну переменную аппаратура не позволяет. Данный конфликт будет разрешен в последовательность (чтение-запись или запись-чтение)
 
alexsid Спасибо, именно это и хотел услышать.
 
Ну уж если все так нужно отследить (конечно не для такого примера с переменной как автор описал), то использоват нужно только Мютекс и Симмафор. Мютекс на ограничение читающих процессов, а симмафор чисто на запись...
Ну во всяком мне так кажется, тока примера что то использования найти не могу реального....
 
раз уж такое дело, то гораздо выгоднее использовать критические секции, если они в языке правильно реализованы. Или synchronized из java. Так-то.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab