The trick with multithreading is to have a fairly simple communication model with the data used in the treads. That is there is not a lot to synchronize because each thread is using almost 100% "thread local" data or immutable data. Commutation is done with a producer consumer queues. It works pretty well.
For a game.. well i can't really see it making much difference for an indie game. We are not talking AAA titles here and we are probably not overly taxing the GPU either. So a simple game loop may be all you need and it some make life very simple.
I run a game engine thread and a graphics thread and the are not synchronized. "Snap shots" of the state are sent to the graphics thread. Its quite a bit more complicated than normal game loop.