На этом слайде мы создадим коллизию и узнаем, как от неё избавиться.
Дата отправки отчёта:
7 декабря 2018 г.
Задание выполнено: за
36 мин.
Чему научился:
Это же очевидно, функцию next() может запускать только кто-то один, другие ждут, по сути это как магазин с кучей касс, но кассир всего один, вот покупатели и стали в один ряд к единственно рабочей кассе, потому что в эту функцию засунули sleep(), которые и отнимает львиную долю времени. просто не нужно в подобные функции пихать что-то длительное, особенно обычные задержки типо sleep(), там должны быть максимально быстрые телодвижения, пока кто-то один занял место, другие могут делать свои задачи, которые по идее должны быть медленнее, чем время выполнения next(), увеличение на единицу быстрее, чем вывод на экран, поэтому всё проходит красиво, пока другие рисуют, один из потоков складывает незаметно для них. В конце же вообще засунули целый цикл в метод next(), пока один на качелях не покатался, другие стояли и ждали очереди.
как вариант, пока он там всё не изучит, не купит что ему надо, короче пока не выйдет, другого не пускали.
Отчёт оценивали: 10558. Иван Воронин+116568. Игорь Тюлькин+13922. Александр+111353. AlliZzeN+19752. chokayes+118626. superGrover+120111. Deep Network+1Посетитель+119384. Владимир+117606. Виктор+117947. Dmitry Sinitsin+1791. Валерий Жданов+19913. vip+11. Евгений Волосатов+13747. Сергей+110494. Алексей В.+1
Начинаем практику по языку C#
Чтобы стать хорошим программистом — нужно писать программы.
На нашем сайте очень много практических упражнений.
После заполнения формы ты будешь подписан на рассылку
«C# Вебинары и Видеоуроки»,
у тебя появится доступ к видеоурокам и консольным задачам.
Несколько раз в неделю тебе будут приходить письма —
приглашения на вебинары, информация об акциях и скидках,
полезная информация по C#.
Научился: Синхронизировать потоки Трудности: Описание урока
1. Обновить класс Worker: добавить счётчик count и заменить вечный цикл конечным, где вывести на экран номер итерации и значение счётчика..
2. Обновить основной класс Main: создать экземпляр класса Worker и с его помощью 5 безымянных экземпляров класса Thread.
3. Запустить программу и проанализировать результаты.
4. Дополнить класс Worker, добавив паузу sleep(10).
5. Запустить программу и сравнить новые результаты с предыдущими.
6. Устранить возникшую коллизию добавлением в класс Worker метода synchronized void next().
7. Запустить программу и убедиться в отсутствии коллизии.
8. Поэкспериментировать с различными вариантами функции next().
9. Объяснить в каких случаях и почему происходит замедление работы программы.
10. Сделать скриншот и выслать отчет на проверку.
Научился: Поэкспериментировали с потоками и коллизиями. Synchronized метод подразумевает, что он может выполняться только одним процессом в данный момент.
Св-во переменной volatile означает, что доступ или изменение данной переменной происходит тут же, без ожидания завершения операций над переменной другими потоками.
Время работы программы увеличилось из-за того, что в Synchronized метод next кроме основных операций была добавлена пауза Thread.sleep(10).