Лекция 5. Multithreading in C++ (потоки, блокировки, задачи, атомарные операции, очереди сообщений)

แชร์
ฝัง
  • เผยแพร่เมื่อ 29 ม.ค. 2020
  • Лекция №5 в курсе "Эффективное использование С++"
    Преподаватель Валерий Михайлович Лесин

ความคิดเห็น • 17

  • @user-xu6co2km1o
    @user-xu6co2km1o 3 ปีที่แล้ว +7

    Ого, вот это лекции, спасибо!

  • @AndersonSilva-dg4mg
    @AndersonSilva-dg4mg 4 ปีที่แล้ว +1

    Спасибо большое!

  • @Ivan.V.Petrov
    @Ivan.V.Petrov 2 ปีที่แล้ว +4

    Спасибо за лекцию, включил на фоне, чтобы уснуть)

  • @philosophoflove
    @philosophoflove 2 ปีที่แล้ว +2

    Супер препод.

  • @VeloVetal
    @VeloVetal 11 หลายเดือนก่อน +2

    1:15:20 -- в оригинале фраза звучит так: "There are 2 hard problems in computer science: cache invalidation, naming things, and off-by-1 errors." -- В компьютерных науках есть две сложные проблемы: инвалидация кэша, именование переменных и ошибка на единицу.

  • @sabotoff932
    @sabotoff932 2 ปีที่แล้ว +3

    Лекция отличная, большое спасибо!
    Я пишу под Windows и всегда пользовалься нативными потоками OC для распараллеливания. Недавно попробовал работать с потоками c++. Там все продумано и логично. Код пишется легко. Но мне показалось, что внутренний библиотечный пул пытается экономить ресурсы. Скажем при 8-ми ядрах на десктопе, мне не удалось добиться одновременной работы 8-ми потоков. Работают не более 6. Остальные стоят в очереди. Еще один неприятный момент: невозможно создать поток в состоянии suspend(?) и точно отследить начало работы потока. Видимо, это плата за переносимость. Нативные потоки в Windows гибче.

  • @user-sq2fl3nw3r
    @user-sq2fl3nw3r 9 หลายเดือนก่อน +1

    Понимаю, что синглтон здесь использовался для демонстрации, но всё же скажу, что начиная с C++11 если в функции инициализируется static переменная, то это гарантировано сделает только один поток, а другие потоки не будут обращаться к неинициализированной переменной.
    Подробнее можно почитать: Энтони Уильямс "Практика многопоточного программирования", с. 100

  • @usergnusmas6879
    @usergnusmas6879 20 วันที่ผ่านมา

    Есть вероятность, что при разбиении по потокам, мультитрэйдинг не будет учитываться. Т.е. на шестиядерном проце, будет использовано только шесть потоков.

  • @IExSet
    @IExSet ปีที่แล้ว

    44:45 Во всех примерах, где объявляется unique_lock c defer_lock, последующий вызов lock производится на них же, а не на исходные мьютексы. Почему здесь не так ? Сработает ли unique_lock если не вызывать на них lock ??? future_status - переводится как "будущий статус".

  • @user-ty1ms9je9s
    @user-ty1ms9je9s 3 ปีที่แล้ว

    Чем Event отличается от Condition Variable? Судя по функционалу - практически одно и то же.

  • @WowSoLaggy
    @WowSoLaggy ปีที่แล้ว

    А разве в примере на 1:00:00 не будет дедлока?
    sending_thread функция лочит мьютекс mt и зависает в вечном ожидании непустого буфера (не освобождая мьютекс) на строке 10. Соответственно, при вызове функции on_frame она задедлочится навсегда в ожидании мьютекса mt на строчке 18.

  • @maxpo801
    @maxpo801 2 ปีที่แล้ว

    1:30:25 volatile

  • @zakharkulbachenko3433
    @zakharkulbachenko3433 2 ปีที่แล้ว +11

    а как мьючить лотекс?

  • @VeloVetal
    @VeloVetal 11 หลายเดือนก่อน

    std::async(std::launch::async, ...); -- как то мало асинков, надо больше, больше!

  • @kaganyevgeny
    @kaganyevgeny 5 หลายเดือนก่อน

    коробит слух когда пи ти ар называют пэ тэ эр :))))