Scheduling of queue operations (push/pop)

Which region does push_back or any other queue methods get scheduled if those operations are inside an always block?

Apart from popping the queue in the same edge, is there anything that can contribute to race in below snippet.
Kindly educate.

always @(posedge clk)
begin
if(condition)
q.push_back(1);
end

always @(posedge clk)
if (q.size() == 1) begin
 // Do something and pop the entry
end

always @(posedge clk)
if (q.size() == 1) begin
 // Some checks
end

In reply to naveensv:

Pushing and popping a queue is a scheduled the same a blocking assigment. You essentially have a 3-way always block race, with two writers and two readers (one is doing both)

You could convert the push/pop into non blocking

q <= {q,1}; // push_back
q <= q[1:$]; // pop_front

But you would still have a race if the push and pop were allowed to happen on the same clock cycle.