Think of a mailbox like a real post box. One process puts letters in, another takes them out. The letters are kept in order (FIFO - First In, First Out).
mailbox mbx;
initial begin
mbx = new(); // Create unbounded mailbox
fork
// Producer
begin
for (int i = 0; i < 5; i++) begin
mbx.put(i); // Put data in mailbox
$display("[%0t] Put: %0d", $time, i);
#5;
end
end
// Consumer
begin
int data;
repeat(5) begin
mbx.get(data); // Get data from mailbox
$display("[%0t] Got: %0d", $time, data);
end
end
join
end