169 похожих чатов

Попытаю ещё раз удачу ``` Ребята, можете подсказать? Есть задача - коллекция пользоватлей/ если

пользователь в работе, то флаг == true
в многопотоке нужно брать только пользователей с block == false, и менять ему тут же на true, чтобы другой поток его не украл.

Подскажите, пожалуйста. как можно подойти к такой задаче?

мне понятно, что коллекция должна быть мутабельная и волатильная, чтобы все потоки видели изменения данной коллекции, но вот как это красиво сделать на Котлине, пока не до конца понимаю.
```

9 ответов

20 просмотров

withLock?

class A(val block: AtomicBoolean) listOf(A(AtomicBoolean())).firstOrNull { it.block.compareAndSet(false, true) }

Alexander-Zapevalov Автор вопроса
Ruslan Ibragimov
class A(val block: AtomicBoolean) listOf(A(AtomicB...

выглядит простым и рабочим решением. Так ли нужны тут корутины?

Alexander Zapevalov
выглядит простым и рабочим решением. Так ли нужн...

Может нужны, а может и нет. Зависит от задачи. Проблема как по флагу найти элемент в коллекции и потоко-безапасно его обновить выполнили Остается задача обновления коллекции

Ruslan Ibragimov
class A(val block: AtomicBoolean) listOf(A(AtomicB...

Тоже подумал про атомарные операции на CompareExchange сразу же

Если на Яве, я бы сделал объект с двумя полями, имя и статус, при изменении статуса синхронизировался бы целиком на объекте и менял статус. Ну а хранил бы уже как удобнее для задачи. Или по статусу или по имени.

Alexander-Zapevalov Автор вопроса
Andrey Panov
Если на Яве, я бы сделал объект с двумя полями, им...

В джаве так оно и было бы, да. Просто в Котлине есть более интересные решения. одно из которых корутины. даже не задумывался о том, разные там потоки или нет 🙂 Вроде как корутины работают в главном потоке

Alexander Zapevalov
В джаве так оно и было бы, да. Просто в Котлине е...

корутины работают в своем пуле потоков, может быть несколько, а может быть один (как например Dispatchers.Main)

Alexander Zapevalov
В джаве так оно и было бы, да. Просто в Котлине е...

Я потому и задал вопрос по корутины, что не уверен. Если все они будут в одном потоке, то вообще ничего придумывать не нужно, взял и поменял. Но я бы на это не рассчитывал и оставил как в Яве. А то поменяют поведение по умолчанию и все...

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта