И Вам за комментарий!) Давайте представим, что у нас есть буфер и два потока(Thread-0 и Thread-1) потребляют элементы с этого буфера, а один(Thread-2) кладет элементы в наш буфер. Рассмотрим случай, когда буфер пуст и мы вызываем метод await внутри блока if. Пусть сначала поток Thread-0 пытается извлечь элемент из буфера. Он видит, что буфер пуст и вызывает метод await. Затем пусть поток Thread-1 пытается извлечь элемент из буфера. Он так же видит, что буфер пуст и вызывает метод await. Затем поток Thread-2 без проблем ложит элемент в наш буфер и будит ранее заблокированные потоки Thread-0 и Thread-1. Затем пусть отрабатывает поток Thread-0. Он извлекает элемент из нашего буфера, который положил поток Thread-2, и в этот момент буфер снова пуст. Но затем вполне возможно, что поток Thread-1 начнет свою работу с точки вызова метода await. Т.к. мы написали if вместо while, поток Thread-1 начнет извлекать элемент из пустого буфера из-за чего возникнет ошибка. Чтобы этого избежать, поток Thread-1 должен еще раз перепроверить, не пуст ли наш буфер снова. Именно поэтому и необходимо помещать вызов метода await в цикл while. Очень надеюсь, что ответил) Извиняюсь за долгий ответ) Что-то я проморгал Ваш комментарий)
Хорошее видео, продолжай в том же духе! Спасибо тебе за уроки!
Супер пример получился!👍
Большое спасибо!)
Отличный познавательный урок
Я так и до конца не понял зачем эти while а не if) Спасибо за уроки, супер видео
И Вам за комментарий!) Давайте представим, что у нас есть буфер и два потока(Thread-0 и Thread-1) потребляют элементы с этого буфера, а один(Thread-2) кладет элементы в наш буфер. Рассмотрим случай, когда буфер пуст и мы вызываем метод await внутри блока if. Пусть сначала поток Thread-0 пытается извлечь элемент из буфера. Он видит, что буфер пуст и вызывает метод await. Затем пусть поток Thread-1 пытается извлечь элемент из буфера. Он так же видит, что буфер пуст и вызывает метод await. Затем поток Thread-2 без проблем ложит элемент в наш буфер и будит ранее заблокированные потоки Thread-0 и Thread-1. Затем пусть отрабатывает поток Thread-0. Он извлекает элемент из нашего буфера, который положил поток Thread-2, и в этот момент буфер снова пуст. Но затем вполне возможно, что поток Thread-1 начнет свою работу с точки вызова метода await. Т.к. мы написали if вместо while, поток Thread-1 начнет извлекать элемент из пустого буфера из-за чего возникнет ошибка. Чтобы этого избежать, поток Thread-1 должен еще раз перепроверить, не пуст ли наш буфер снова. Именно поэтому и необходимо помещать вызов метода await в цикл while. Очень надеюсь, что ответил) Извиняюсь за долгий ответ) Что-то я проморгал Ваш комментарий)
Очень крутые уроки!
Спасибо большое!) Безумно приятно!)
Спасибо за уроки! Продолжай!!!
Вам спасибо!)