4. Примитивы синхронизации II: spin, conditional. Обработка сигналов

  Рет қаралды 3,796

Computer Science Center

Computer Science Center

Күн бұрын

Пікірлер: 17
@Cadovvl
@Cadovvl 2 жыл бұрын
Отличные лекции. Спасибо.
@ValentinNechayev
@ValentinNechayev 2 жыл бұрын
[55:50 и вокруг] В лекции неправда: notifyOne, notifyAll будут корректно работать, даже если их вынести из-под мьютекса. Причина в том,, что собственно модификация наблюдаемых данных происходит всё равно под локом, так что вмешательство 1-го треда в это время невозможно, пока второй тред не уйдёт в wait(). Но если второй проверил и ушёл в wait(), то первый добавил данные до входа второго в блокировку, значит, второй проверил наличие нужного состояния. В любом варианте, работа в порядке: захватил - проверил, что нет нужного - ушёл в спячку - гарантирует, что спячка будет только если данных нет, ситуации с описанным разрывом не будет. А вот spurious wakeups в этом варианте, да, чаще. Но notify вне лока раньше было иногда эффективнее, если не было переноса блокировки между примитивами (типа futex). Сейчас она обычно есть и смысла делать notify вне лока уже нет.
@fisyamaloy1754
@fisyamaloy1754 2 жыл бұрын
1:29:30 компилятор разве не может оптимизировать ту константу и просто подставлять в cout единицу?
@YoutubeFrogOfHell
@YoutubeFrogOfHell 4 ай бұрын
было бы супер получить какие-то материалы или, возможно, ресурсы попрактикроваться, может лабы остались у кого-то?
@dolovnyak
@dolovnyak 2 жыл бұрын
а возможно ли где-то пдфку лабораторной работы получить?
@Re_murr
@Re_murr 2 жыл бұрын
Возможно это у меня такое восприятие, но по моему здесь лектор немного смешал в кучу понятия CAS и "без-перехода-в-кернел-спейс". Ведь можно сделать честный мьютекс с ожиданием через кернел-спейс на CAS операции и 1 инте. И также можно сделать атомик-инт без CAS инструкции используя flag+victim подход из кода mutex из прошлой лекции. То есть SpinLock = "лок-без-перехода-в-кернел-спейс", а CAS - это просто более быстрый и удобный способ организовать барьер. Одно не требует другого
@ValentinNechayev
@ValentinNechayev 2 жыл бұрын
Kernel или user land в общем случае ни при чём. Главные вещи тут следующие: Если нет возможности довериться кому-то на "разбуди когда освободится", пригоден только спинлок. _Обычно_, да, это в ядре. Явные случаи - например, когда один из участников - обработчик прерывания типа top half: он не имеет права спать, он должен отработать (как можно быстрее) и завершиться. Но бывает такое и в userland, когда не хотят или не могут полагаться на диспетчер. Если можно уйти в спячку - это семафор (подразумевается, с очередью) или мьютекс (у них есть пересечение, но бывает семафор не мьютекс и мьютекс не семафор). Есть и в userland, и в ядре тоже есть: в Linux это вызовы типа down, down_interuptible... Там может покрутиться в режиме спинлока и затем увести весь тред в спячку. Это используется, когда участники - обычные треды или bottom half обработчики прерываний (которые давно загнаны под ядерные треды типа ksoftirqd). PS: ядерный механизм sleep/wakeup это полнй аналог и предшественник condvars.
@ValentinNechayev
@ValentinNechayev 2 жыл бұрын
1. The new thread inherits a copy of the creating thread's signal mask (pthread_sigmask(3)). И что тут экзотического? всё логично. 2. Давно уже есть signalfd, sigtimedwait и т.д., которые переводят обработку сигналов в синхронный стиль. Если упоминать вообще сигналы, надо упоминать и эти средства. Про непотерю соединения при рестарте sshd: sshd форкается и соединение обрабатывается отдельным процессом (точнее, несколькими - для секьюрити часть действий вынесена в отдельные сильно ограниченные процессы). Вообще надо бы это знать, если рассказывать про такие средства.
@manOfPlanetEarth
@manOfPlanetEarth 2 жыл бұрын
пролистал выпуски в этом плейлисте: я так понял, что используются разные языки: и джава и что-то и семейства с - верно?
@Re_murr
@Re_murr 2 жыл бұрын
Здесь объясняется концепция параллельного программирования. От языка она не зависит. Для демонстрации различных конструкций используются популярные и всем известные языки или даже псевдокод
@manOfPlanetEarth
@manOfPlanetEarth 2 жыл бұрын
@@Re_murr "всем известные языки" а че ты за всех говоришь? охереть, ты типан.
@Re_murr
@Re_murr 2 жыл бұрын
@@manOfPlanetEarth Не надо демагогии )
@manOfPlanetEarth
@manOfPlanetEarth 2 жыл бұрын
@@Re_murr не надо подмены понятий. я тебе всё конкретно сказал. демагогией тут ты занялся именно этим сообщением.
@Re_murr
@Re_murr 2 жыл бұрын
@@manOfPlanetEarth Забавно наблюдать как "конкретный пацан" пишет коменты к видео о многопоточном программировании.. )) Ну, в принципе, почему бы и нет. Но некий диссонанс все таки у меня это вызывает )
5. Ошибки || программирования
1:19:23
Computer Science Center
Рет қаралды 2,6 М.
When you have a very capricious child 😂😘👍
00:16
Like Asiya
Рет қаралды 18 МЛН
REAL or FAKE? #beatbox #tiktok
01:03
BeatboxJCOP
Рет қаралды 18 МЛН
Try this prank with your friends 😂 @karina-kola
00:18
Andrey Grechka
Рет қаралды 9 МЛН
3. Примитивы синхронизации
1:24:43
Computer Science Center
Рет қаралды 6 М.
What are spinlocks?
7:13
Defog Tech
Рет қаралды 40 М.
2. Введение в Coq
1:24:33
Computer Science Center
Рет қаралды 2,5 М.
1. Семантика и её значение
1:27:41
Computer Science Center
Рет қаралды 17 М.