Size: a a a

2018 April 21

BP

Bogdan Panchenko in Kotlin JVM
если что меня поправят
источник

BP

Bogdan Panchenko in Kotlin JVM
Quantum Harmonizer
но только все пишут)
на работе похожая фишка, отдел, из 5-ти человек работает с ексель файлом, много кто пишет, но в разные ячейки. Нет альтернативных либ?
источник

BP

Bogdan Panchenko in Kotlin JVM
потомучто врядли без костылей это обойдешь
источник

BP

Bogdan Panchenko in Kotlin JVM
можно написать свои функции, которые имеют аналогичный код тоько без проверку на блокировку рид
источник

BV

Boris Vanin in Kotlin JVM
Quantum Harmonizer
CAS, т. е. и читаю, и пишу
Я ничего не понял, так как ты используешь и кас и Лок одновременно?
источник

BV

Boris Vanin in Kotlin JVM
У меня есть подозрение, что ты делаешь что-то не то
источник

QH

Quantum Harmonizer in Kotlin JVM
На примере той же таблицы.
Чтобы писать в ячейку, захватывается ридлок. Стопицот потоков имеют возможность писать в ячейки одновременно, используя CAS.
Но первый, кто записывает инфу, и последний, кто стирает, должны выполнить дополнительные действия однопоточно, под райтлоком.
источник

BV

Boris Vanin in Kotlin JVM
Quantum Harmonizer
На примере той же таблицы.
Чтобы писать в ячейку, захватывается ридлок. Стопицот потоков имеют возможность писать в ячейки одновременно, используя CAS.
Но первый, кто записывает инфу, и последний, кто стирает, должны выполнить дополнительные действия однопоточно, под райтлоком.
Это не ответ на мой вопрос
источник

BV

Boris Vanin in Kotlin JVM
Не понимаю зачем брать ридлок, чтобы потом писать касом, только чтобы потом райтлок можно было взять?
источник

QH

Quantum Harmonizer in Kotlin JVM
А что нужно брать, чтобы писать касом? В нормальной ситуации — ничего. Но мне нужно иметь возможность заставить всех ждать.
источник

BV

Boris Vanin in Kotlin JVM
Quantum Harmonizer
А что нужно брать, чтобы писать касом? В нормальной ситуации — ничего. Но мне нужно иметь возможность заставить всех ждать.
Ну да, чтобы писать касом брать ничего не надо. Блин, надо идти, напишу, когда вернусь
источник

BV

Boris Vanin in Kotlin JVM
Сори
источник

QH

Quantum Harmonizer in Kotlin JVM
источник

BV

Boris Vanin in Kotlin JVM
Ох, там серьезно кода
источник

BV

Boris Vanin in Kotlin JVM
Интересно, расскажи, что ты пытаешься сделать? Обработать параллельную установку значения?
источник

QH

Quantum Harmonizer in Kotlin JVM
Boris Vanin
Интересно, расскажи, что ты пытаешься сделать? Обработать параллельную установку значения?
Пишу очередную реализацию ФРП.
На некий сабджект можно подписаться и отписаться. Здесь...
val a = concurrentMutablePropertyOf("hello")
val b = a.map(String::toUpperCase)

...значение b вычисляется из значения a, т. е. b должен быть подписан на a. Но имеет смысл подписываться только тогда, когда на b тоже хоть кто-нибудь подписан, в противном случае лучше стать добычей для сборщика мусора.
Добавление/удаление подписчиков отлично работает параллельно, с помощью CAS. Но когда подписывается первый, надо подписаться на оригинал, а когда последний отписывается, надо отписаться. И если кто-то будет дрочить подписку/отписку первого подписчика под гонкой, есть большая вероятность неправильно подписаться/отписаться, поэтому это единственное место, которое не lock-free.
источник

BV

Boris Vanin in Kotlin JVM
Аха, теперь сильно понятней стало
источник

BV

Boris Vanin in Kotlin JVM
Я бы сделал блокировку на подписку/отписку, почему ты решил тут касы использовать? Да и почему думаешь на это место будет какая-то бешеная нагрузка?
источник

QH

Quantum Harmonizer in Kotlin JVM
делаю касы потому что могу)
источник

QH

Quantum Harmonizer in Kotlin JVM
блокировки всё-таки дорого захватывать, пачку подписал — уже притормозил
источник