Consume is for data dependency, loading through a pointer is the obvious one, but there are other variants (using the loaded value as an index for example).
Acquire is also not about pointers but about independent reads: reading a flag and then reading data protected by that flag for example.
Consume exists because it can be implemented cheaply on some platforms with relatively expensive acquire barriers (ARM, POWER). Alpha didn't respect load dependencies, so consume is as expensive as acquire.
Acquire is also not about pointers but about independent reads: reading a flag and then reading data protected by that flag for example.
Consume exists because it can be implemented cheaply on some platforms with relatively expensive acquire barriers (ARM, POWER). Alpha didn't respect load dependencies, so consume is as expensive as acquire.