1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

One Writer Multireader

Тема в разделе "С и С++", создана пользователем Wert_Lex, 8 окт 2010.

  1. Wert_Lex

    Wert_Lex Гость

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

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    2
    Слабо верится
     
  3. grigsoft

    grigsoft Well-Known Member

    Репутация:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    В случае одной целой переменной - ничего не случится.
     
  4. Sekt

    Sekt Гость

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

    grigsoft Well-Known Member

    Репутация:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Sekt, что такое, по-вашему, deadlock, и от чего он происходит?
     
  6. grigsoft

    grigsoft Well-Known Member

    Репутация:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Wert_Lex
    В худшем случае - потоки прочитают неожиданное число. Но мне кажется что и этого не будет, хотя могу и ошибаться.
     
  7. Sekt

    Sekt Гость

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

    grigsoft Well-Known Member

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

    Wert_Lex Гость

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

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

    grigsoft Well-Known Member

    Репутация:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    итератор чего?
     
  11. Wert_Lex

    Wert_Lex Гость

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

    alexsid Гость

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

    Wert_Lex Гость

    Репутация:
    0
    alexsid Спасибо, именно это и хотел услышать.
     
  14. DarkKnight

    DarkKnight Well-Known Member

    Репутация:
    0
    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Ну уж если все так нужно отследить (конечно не для такого примера с переменной как автор описал), то использоват нужно только Мютекс и Симмафор. Мютекс на ограничение читающих процессов, а симмафор чисто на запись...
    Ну во всяком мне так кажется, тока примера что то использования найти не могу реального....
     
  15. Wert_Lex

    Wert_Lex Гость

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

Поделиться этой страницей