Синхронізація потоків
Ми шукаємо баланс між безпекою (сидіти вдома) та життєвістю (кудись поїхати)
Lock проста синхронізація
Monitor проста синхронізація, безпечна до вилетів
Manual reset event усі чекають на одного
Auto reset event один за одним, але інші потоки можуть втрутитися
Mutex лише один за одним
Semaphore кількість потоків, що працюють одночасно
foreground thread - працює до кінця
background thread - працює доки ще є потоки foreground thread, якщо ні - завершує роботу
Приклади:
Машини на перехресті
Літаки що сідають в аеропорті
Депозити, що знімаються в банку
Читання/запис в той самий файл
Проблеми!
x = x + 1;
Завантажити значення х в регістр
Збільшити значення в регістрі
Записати нове значення в х
І потоки можуть перемикатися в будь який час між цими операціями
long потребує 2х операцій для читання і запису
Потік може містити копію змінної в своєму кеші (лікує volatile)
Потік може бути вічним
Потоки можуть обмінюватися сигналами
Потоки можуть бути взаємо заблокованими