I quite like the following separation

Code:
 --------------------------------------
| Core   | Thread    | Game Process    |
 --------------------------------------
|   0    |      0    | Game Update     |
|        |      1    | I/0             |
 --------------------------------------
|   1    |      0    | Game Rendering  |
|        |      1    |                 |
 --------------------------------------
|   2    |      0    | Audio           |
|        |      1    |                 |
 --------------------------------------
The idea being that there would be 2 back buffers BB0 and BB1.
1 . Game Update thread would write to BB0.
2. Once complete, the Game Rendering thread would read BB0 and output to the screen
3. While 2 is going on, The Game Update would start writing to BB1

So therefore GU ( Game Update ) is only ever writing to the one of the back buffers, while GR ( Game Rendering ) is only ever reading from one of the back buffers. This then alleviates any read write conflicts.

Obviously GU should be analysed further to see if there is any scope for more parralelism in terms of collision detection, physics or AI that could split up.

Now how to actually get this working and cross-platform, is another matter.

Anyone see any problems with the above?