🟢ПАМЯТЬ И ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ В JS. ЧАСТЬ 3



В прошлом посте мы познакомились со структурой данных SharedArrayBuffer и API Atomics.

Давайте быстренько вспомним: SharedArrayBuffer в общем то обычный ArrayBuffer кроме того нюанса, что он может предоставлять одновременный доступ к себе сразу нескольким потокам. Разумеется, если хотя бы один из потоков начинает писать в те ячейки этого буфера, которые читаются из других потоков, то немедленно возникает гонка.



💡Выносим важную мысль: самое по себе изменяемое состояние не приводит к проблемам - проблемы возникают, когда у нас есть одновременно писатель и читатель.



Вообще, существует специальный контейнер RWLock, который предоставляет к разделяемым данным безопасный интерфейс по контракту: мы можем иметь неограниченное количество читателей, если нет писателя; мы можем иметь одного и только одного писателя, но не читателей. Как видите, выполнение этих двух пунктов гарантирует нам отсутствие гонок при изменении данных. Но как создать такой контейнер? А вот тут нам и понадобятся Atomics.



Давайте напишем его!



Продолжение в статье 👇



https://teletype.in/@kobezzza/AHCsDJbFkEj