lock_guard mutex c++ | Cинхронизация потоков | Многопоточное программирование | C++ #7

Поділитися
Вставка
  • Опубліковано 5 лис 2024

КОМЕНТАРІ • 61

  • @SimpleCodeIT
    @SimpleCodeIT  6 років тому +35

    *Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)*

    • @MrZaSk-od7rc
      @MrZaSk-od7rc 6 років тому

      Я с тобой с самого начала и я очень удивлен ты очень хорошо объясняешь!

  • @kemsekov6331
    @kemsekov6331 4 роки тому +67

    Для тех, кто не понял зачем это нужно
    std::mutex m;

    void bad()
    {
    m.lock(); // определяем мьютекс
    f(); // если f() кинет исключение, то поток так и останется закрытым
    if(!everything_ok()) return; // если функция ретёрнится раньше unlock, то мьютекс тоже останется закрытым
    m.unlock(); // тут мьютекс разлочится
    }

    void good()
    {
    std::lock_guard lk(m); // RAII class, обычный казалось бы мьютекс
    f(); // если f() кинет исключение, то мьютекс разлочится
    if(!everything_ok()) return; // если программа внезапно ретёрнится, то мьютекс разлочится
    } // и тут соответственное мьютекс разлочится
    как видите это просто безопаснее и гарантирует нормальную работу потоков

  • @SimpleCodeIT
    @SimpleCodeIT  6 років тому +16

    #многопоточность #SimpleCode #урокипрограммирования

  • @user_random_sha256
    @user_random_sha256 6 років тому +26

    Спасибо большое за Ваш труд!!!
    Одни из самых доступных и познавательных видео!

  • @BarbaraBezd
    @BarbaraBezd 2 роки тому +1

    Очень разжевана информация, спасибо. После такого ролика невозможно не понять как это все работает.

  • @markus1646
    @markus1646 6 років тому +24

    Не закидывай канал только, очень интересные уроки

  • @JohnWickMovie
    @JohnWickMovie 6 років тому +18

    Расскажи про shared_mutex и unique_mutex

  • @cppprograms5868
    @cppprograms5868 4 роки тому +1

    Просто класс. По моему мнению самый лучший канал по С++

  • @jangiryanarsen4952
    @jangiryanarsen4952 6 років тому +4

    Продолжай уроки по C++, мне так же крайне интересно!!

  • @artlinestudio6735
    @artlinestudio6735 3 роки тому +1

    Очень полезный и интересный урок! Умоляем продолжить уроки по С++. Вы лучший!

  • @ДмитрийБузницкий-б3н

    Спасибо за урок, Сергей. Как всегда всё подаёшь доходчиво

  • @andrewbistroff7558
    @andrewbistroff7558 6 років тому +9

    Сергей спасибо за шикарные уроки.

  • @АлексейБаринов-ь5н
    @АлексейБаринов-ь5н 3 роки тому +1

    Как всегда лайк, этот канал достоен наивысшего респекта

  • @andreyzavalishchev4818
    @andreyzavalishchev4818 6 років тому +7

    Сергей, спасибо большое за отличный урок!

  • @GoodDay-nd4ol
    @GoodDay-nd4ol Рік тому

    Спасибо за урок!

  • @segars9604
    @segars9604 4 місяці тому

    Спасибо!)

  • @Antonov_Ivan.
    @Antonov_Ivan. 6 місяців тому

    Спасибо за ролик!

  • @ILsanIsAdmin
    @ILsanIsAdmin 3 роки тому

    Большое спасибо за урок!

  • @TheRussificator
    @TheRussificator 2 роки тому

    Спасибо за лекцию.

  • @freemanchronowski2349
    @freemanchronowski2349 3 роки тому

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

  • @NoGameNoLIfe-3R
    @NoGameNoLIfe-3R 6 років тому +4

    Огромное, Спасибо !

  • @pavelios3577
    @pavelios3577 5 років тому

    Спасибо за урок.

  • @trimo1120
    @trimo1120 Місяць тому

    Можно создать указатель на динамическую память под объект guard, и потом вызвать delete guard;

  • @dmitrieff_lwyr
    @dmitrieff_lwyr 6 років тому +4

    спасибо, ждём новые ролики

  • @MihailAbysmo
    @MihailAbysmo 6 років тому +3

    Спасибо!

  • @kly4niktaverni601
    @kly4niktaverni601 6 років тому +3

    Спасибо

  • @pluto2656
    @pluto2656 6 років тому +8

    когда Git будет? Умоляю

  • @АндрейСудаков-с1х
    @АндрейСудаков-с1х 2 роки тому

    Спасибо за урок! И спасибо за хороший монтаж видео - экономит много времени при просмотре

  • @hutoryanin
    @hutoryanin 3 роки тому +1

    *Л. а. й. к. о. с.* за видос.

  • @TonyStark-b4w
    @TonyStark-b4w 5 місяців тому

    А нельзя сделать так ? Просто вызвать деструктор в нужном месте:
    mutex mtx;
    void Print(char ch)
    {
    this_thread::sleep_for(chrono::milliseconds(2000));
    lock_guard guard(mtx);
    for (int i = 0; i < 5; ++i)
    {
    for (int j = 0; j < 10; ++j)
    {
    cout

  • @coolguy730
    @coolguy730 6 років тому +7

    Здравствуйте, Сергей!
    Скажите пожалуйста, у вас есть знания OpenGL? Будут ли уроки по данной теме? Заранее спасибо! Ваши уроки самые доступные, вы отличный преподаватель!

    • @Tragraph
      @Tragraph 6 років тому +1

      OpenGL можно и самостоятельно попробовать осилить. А вот линейную алгебру нужную для его изучения я бы послушал от Сергея.

    • @opencv1717
      @opencv1717 6 років тому

      Если с нуля, то лучше Vulkan учить имхо. Все - таки за ним будущее

    • @ubelian
      @ubelian 5 років тому +4

      @@opencv1717 Вулкан учить не зная хотя бы немного OpenGL это пиздец.

    • @postdisc0
      @postdisc0 Рік тому

      @@opencv1717 ну и совет, конечно, в опенгле-то днём с огнём еле разберешься, а ты про вулкан)) начинать со сложного а не с простого - проигрышная стратегия

  • @bakdauletm5080
    @bakdauletm5080 6 років тому +2

    ❤️

  • @КОД-ш8у
    @КОД-ш8у 5 років тому +1

    а почему порядок вывода символов поменялся?

  • @николайниколаев-ж8е
    @николайниколаев-ж8е 6 років тому +2

    Привет, скажи а можно использовать визулстудио для языка Си ?? а то при установки пакетов о Си там не слова. Нужны танцы с бубном или ???

    • @dartware8539
      @dartware8539 6 років тому +1

      Просто вместо Main.cpp создаете файл Main.c и пишете там свой сишный код. Студия "умная", сама поймет по расширению файла что нужен сишный компилятор. Ничего дополнительно устанавливать не нужно, танцев с бубном тоже.

    • @Tragraph
      @Tragraph 6 років тому

      нет, создавай файл кода как с при выборе с++

  • @Agent-kt7sv
    @Agent-kt7sv 2 роки тому +1

    Сергей, извините за странный вопрос, но обнаружилась любопытная деталь: при добавлении "sleep" (причём как и через chrono::milliseconds(2000), chrono::seconds(2), так и просто через sleep_for(2s)), иногда выходило так, что прямоугольники выводились в таком порядке: из *, из @, из #, или ещё в ином. Можно ли узнать причину такого странного "феномена" (: ? Заранее благодарю!

    • @ДмитрийНормов-ю6ц
      @ДмитрийНормов-ю6ц 2 роки тому

      ну как, разобрался?

    • @libertariancom
      @libertariancom Рік тому +2

      @@ДмитрийНормов-ю6ц Трабл в недостаточном количестве возможных потоков у компа скорее всего. Из-за чего комп сам выбирает, какой рапустить первый, то есть они не параллелятся

  • @aerahtv0000
    @aerahtv0000 5 років тому

    а если бы функция Print возвращала значение где-то посередине с помощью return, то был бы ли вызван деструктор в этот момент?

  • @nicholas92
    @nicholas92 2 місяці тому

    9:51 асинхронно =одновременно?

  • @protasov-by
    @protasov-by 4 роки тому

    Смотрел смотрел, никак не могу придумать как создать треды в цикле, вот в мейне луп из 10 шагов например, на проце 24 ядра, каждый шаг вызывается член класса типо int DoWork(int,int) из n позиций если каждая функция цикла тяжёлая по вычислениям и нужно записать результат в некой массив. я пробую и получаю ub по моей логике надо создавать тред и джойнить сразу чтобы результат DoWork записался в ячейку массива. там же в цикле где он и создается итог линейное исполнение функции. может можно как-то массиву пометить mutable/vitable запустить в цикле 10 тредов std::thread( [&]() { result[i] = DoWork(x[i],y[i]); } а оно само там подождёт самую долгую операцию выполнив все быстрые в разных ядрах и продолжится стандартный ход main? Иначе как сказать процессу что он detach но при этом сделать lock прямо в моменте return из функции?

  • @pridelander
    @pridelander 2 роки тому

    Отличный курс! Почему он бесплатный?!

    • @postdisc0
      @postdisc0 Рік тому

      потому что ШОК: не всё платное=хорошее и не всё хорошее=платное. лохи которые уравнивают эти вещи нередко оказываются обмануты разводилами))

  • @Minecraftfilesurviival
    @Minecraftfilesurviival 6 років тому

    Когда C#?

  • @ИгроманРоман-н2ш

    не очень понял нафига он если мы ограничиваем всю функцию тогда смысл в потоке ее вызывать а если ограничивать часть кода тогда мьютекс удобней ведь лок гард тоже нельзя забывать ограничивать

  • @explorus77
    @explorus77 5 років тому +1

    И ни слова про исключения и раскрутку стека, ну и что лок-гард реализует RAII. Или это слишком мудрено для целевой аудитории?

    • @0xMorgan
      @0xMorgan 5 років тому +4

      Сейчас бы где-то что-то вычитать и возгордиться этим. Курс для новичков. Сейчас рассказывать об RAII не имеет практической ценности и больше запутает людей.

    • @ДмитрийНормов-ю6ц
      @ДмитрийНормов-ю6ц 2 роки тому +3

      @@0xMorgan , нет, чел прав, надо было бы упомянуть....

  • @outcast-cr5yy
    @outcast-cr5yy 6 років тому +4

    Спасибо

  • @ЯрославГоловко-ф6и

    спасибо

  • @DD0S2
    @DD0S2 3 роки тому

    спасибо