signals work on a scheduling system. They do no get updated until the process they are updated in suspends or waits. I am a bit worried you ask about multiple processes, because a signal can only be updated in a single process. You cannot assign a signal in multiple processes or it counts as a multple driver error (or in the case of a std_logic, you will get 'X').
Anyway, back to the scheduling thing, because of this, you can write code like this:
Code:
process(clk)
begin
if rising_edge(clk) then
a <= 1;
a <= 2;
a <= 3;
end if;
end process;
Because the signal takes the last assignment, another process can read "a" at the next clock edge (or delta) and would read 3, because the 1 and 2 assignments got overwritten by the 3rd one.
On to your questions:
Which process will run first? Neither. They both run at the same time.
Do I have to worry about the dependencies of signal A since it is in two different processes? No, because you can only update it in a single process.
can I use port signals and declared signals in the sensitivity list for a process? Yes. But with a clocked process, you only need clock in a sensitivity list (which is probably a port) and reset if you want async reset. A port is a signal.
Permute mentions shared variables that do allow writes from multiple processes, and when they get updated will depend on the behaviour of your simulator (or carefully constructed code). I would not recommend using them though. A synthesisor will treat them as a signal during compillation (and you'll get the same multiple driver errors)