Связанный поток пользовательского интерфейса AtomicInteger

Я читал о машинах SMP (x86/ARM) и переупорядочивании компиляторов для повышения эффективности. Теперь я хочу сделать счетчик, и переменная живет как частный член реализации ActivityLifecycleCallbacks. Операции с этой переменной выполняются при обратных вызовах из Android (которые всегда находятся в потоке пользовательского интерфейса).

Теперь, потому что «x++» не является атомарным оператором. Нужно ли использовать AtomicInteger? даже если переменная всегда доступна только в потоке пользовательского интерфейса?


person Jai Pandit    schedule 04.12.2019    source источник


Ответы (1)


Если к нему когда-либо обращался только поток пользовательского интерфейса, то технически нет, вам не нужно было бы использовать AtomicInteger. Когда я говорю доступ, я имею в виду как чтение, так и запись.

Однако, учитывая, что вы работаете в параллельной архитектуре, вероятно, безопаснее просто использовать параллельный объект, такой как AtomicInteger, или более производительный LongAdder.

person John Vint    schedule 04.12.2019
comment
не уверен, что вы подразумеваете под безопасным. Я хотел бы иметь твердое конкретное и уверенное понимание этого. Я не хочу, чтобы я чувствовал себя небезопасно, делая правильные вещи! - person Jai Pandit; 04.12.2019
comment
Мой первый комментарий - это ответ, если поток пользовательского интерфейса является единственным, когда-либо касающимся поля, вам не нужен AtomicInteger. - person John Vint; 04.12.2019
comment
Это мое понимание, однако я хотел бы отметить здесь, что не только я имею дело с SMP. Большинство новых устройств Android основаны на архитектуре SMP, будь то x86 или ARM. Таким образом, большинство разработчиков Android на самом деле используют только SMP или их приложения работают только на них. - person Jai Pandit; 04.12.2019