Многопоточный С++. Лекция №6

Поделиться
HTML-код
  • Опубликовано: 15 ноя 2024

Комментарии • 19

  • @sanb4100
    @sanb4100 8 лет назад +1

    Очень поверхностно, буквально с самого начала нет информации о разнице/схожести процессов и потоков. На вопросы студентов идут какие-то неубедительные ответы, типа: "Ну можно так, а можно и так, и многие приложения так построены..."
    Хотя, возможно, для этого(начального) уровня слушателей больше и не надо.

  • @roman.chudov
    @roman.chudov 9 лет назад

    std::future называется "фьючерс" - это такой "квиток", который мы получаем при создании std::async, чтобы с помощью этого квитка иметь доступ к результатам выполнения функции потока. Стоит отметить, что поток может сразу не запуститься, но он гарантированно запустится (если не был запущен), когда мы вызовем фьючерс.get();

    • @VladislavYaroslavlev
      @VladislavYaroslavlev 9 лет назад

      +Roman Chudov не фьючерс, а фьючер :-) Множественного числа там нет, это не фьючерс на нефть :-)

  • @vit1251
    @vit1251 8 лет назад

    19 слайд хорошо бы снабдить UML Sequence диаграммой, так как на доске ничего не видно

  • @AndreyAndruschenko
    @AndreyAndruschenko 9 лет назад

    Vladislav, вы заблуждаетесь или путаете понятия - mutex таки можно менять из любого потока создавшего его процесса.

    • @VladislavYaroslavlev
      @VladislavYaroslavlev 9 лет назад

      +Andrey Andruschenko вы же сами цитируете доки:
      "A thread attempting to lock a mutex that is already locked by another thread is suspended ***until the owning thread unlocks the mutex first***."
      Анлочить может ТОЛЬКО owning thread, о чём я и говорю.

    • @VladislavYaroslavlev
      @VladislavYaroslavlev 9 лет назад

      +Andrey Andruschenko а, ну я ниже написал "изменить", может неочевидно просто: взведённый мутекс может изменить только тот, кто его взвёл.
      А семафор может изменять любой тред.

    • @AndreyAndruschenko
      @AndreyAndruschenko 9 лет назад

      Да, вы выразились не совсем понятно. Отсюда и мои уточнения.

    • @VladislavYaroslavlev
      @VladislavYaroslavlev 9 лет назад

      Andrey Andruschenko ну на самом деле, другой тред не может изменить мутекс, пока он занят: ни залочить, ни анлокнуть

    • @AndreyAndruschenko
      @AndreyAndruschenko 9 лет назад

      Да, я знаю. Иначе, как говорится, "кина бы не было". Как я писал, мой комментарий появился ввиду неверного понимания вашего комментария. Сейчас все вопросы сняты.

  • @VladislavYaroslavlev
    @VladislavYaroslavlev 9 лет назад

    22:16 "Мьютекс - это бинарный семафор." - неверно (состояние мьютекса нельзя изменить из другого потока, в отличие от бинарного семафора)

    • @roman.chudov
      @roman.chudov 9 лет назад

      +Vladislav Yaroslavlev зачем, в таком случае, существуют мьютексы, если их нельзя изменить в другом потоке?

    • @VladislavYaroslavlev
      @VladislavYaroslavlev 9 лет назад

      Roman Chudov как раз чтобы нельзя было попасть в защищённую мутексом область дважды (из одного и того же или из разных потоков - неважно)

    • @VladislavYaroslavlev
      @VladislavYaroslavlev 9 лет назад

      Roman Chudov​ другими словами, анлочить мутекс может только тот поток, который его залочил

    • @VladislavYaroslavlev
      @VladislavYaroslavlev 9 лет назад

      Roman Chudov сейчас, кстати, проверил, на GCC 4.9.2 можно анлочить мутекс из другого потока, но это однозначно не соответствует стандарту c++11/14, это undefined behavior, завтра проверю в последних clang и gcc

    • @VladislavYaroslavlev
      @VladislavYaroslavlev 9 лет назад

      Roman Chudov так, а доки pthread явно говорят, что из другого потока нельзя