Typically, a process that changes data in shared memory first locks the memory address block that is to be changed (waiting until no other process is accessing that block), makes the changes, updates the "time of last change" flag, and releases the lock.
The "non-consistent memory" API is used for those rare cases, usually older systems, where the memory management needs to be done "by hand," and the programmer is going to keep all DMA correctly synchronized in code the programmer will write.
If you have a system where multiple processes are accessing the same block of shared memory, you need to make sure that, whenever one process changes a value in that shared memory, all the other processes know that, if they need to use data from the changed value(s) in the shared memory, they apply all the changes.
Look at
this Wikipedia article for a discussion of inconsistent cache memory in multiprocessor systems. The same problem occurs with DMA by multiple process in a time-sliced single processor system.