Originally posted by Tom Nuydens:
Pipelining! Don't let both threads go at your data simultaneously, but arrange them in a pipelined fashion by giving each thread an input queue where you can store pending "jobs" that the thread needs to perform.
For your particular example, the cull thread goes through your data and gives every visibile object to the draw thread. The draw thread will process it when it's ready to do so.
That said, you should really ask yourself if this is worth it. If frustum culling is that much of a CPU hog that you would consider parallellizing it, maybe you're not doing it right? Hierarchical frustum culling is not very expensive if you're a little clever about how you do it.
-- Tom