Atomic vs Mutex

When would someone prefer to use atomics over a mutex? (Select all that apply)

A

When protecting a complex critical section with multiple variables

B

When the operation can be expressed as a single read-modify-write

C

When implementing lock-free data structures

D

When updating a single shared counter or flag

E

When minimizing context switches and syscalls