Хорошо известно, что блокировки — это не очень здорово: нужно понимать, где взять блокировку, где ее отпустить и как сделать так, чтобы блокировка (а точнее, критическая секция) не была узким местом в вашем приложении.
Синхронизация без блокировок возможна — для этого используются так называемые универсальные операции, то есть, операции типа Compare-And-Set (CAS). В этом докладе мы поговорим о том, что такое CAS-операции и о том, что на эту тему есть в Java и C#. Мы поговорим про семантику таких операций с точки зрения Java и C# Memory Model и про особенности их реализации как в разных версиях JDK/JVM, так и на разном железе. Будут показаны несколько базовых идиом, на которых базируется неблокирующая синхронизация и алгоритмы без блокировок.
Доклад будет полезен как тем разработчикам, которые слышали про атомики и неблокирующую синхронизацию, но не пользовались ей в продакшене, так продвинутым девелоперам, которые интересуются теорией многопоточности или особенностями реализации многопоточности на современных платформах.
Тема и тезисы уточняются
Презентация доклада:
Запись выступления: