Well, I'm trying to make a wireless communication card based on 434MHz RF. That means that on the Pi side a program will want to send packets (simple orders, not big data), and receive answers (small data, like temperature) from the distant arduino.
On the arduino side the i2c code has to receive the message to forward via RF, wait for an acknoledge (or information) from another distant Arduino and give it back to the pi when requested. Hence the random latency used to simulate the RF part.
As you said i2c is interrupt driven, and so is virtualWire for RF. Therefore I have to protect the buffers that will be shared by both systems.
The message follows this path:
Pi ---- (i2C) ----> Arduino1 ---- (VirutalWire (RF)) ---> Arduino 2
And back (for answer).
Pi <---- (i2C) ---- Arduino1 <---- (VirutalWire (RF)) --- Arduino 2
The program on the pi side is not interrupt driven so it has to poll i2c after the message is sent until the answer is received.