Caution with your terminology. When you say that a changed in another "process", it has special meaning in VHDL (a process is a keyword in VHDL), and your code has no processes.
Synthesizers will process your code as:
a <= c and d; b <= (c and d) and c;
Simulators usually assign a to the first pass, and then assign b to the second pass "delta" later. A delta is an infinitesimal time delay that takes place at the same time as the simulation, as the original destination.
Please note that this is a rough generalization of what is actually happening ... if you want complete information, read the documentation that came with your toolchain.
source share