Threading is slow and unpredictable?
        Posted  
        
            by 
                Jake
            
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Jake
        
        
        
        Published on 2012-11-19T22:08:26Z
        Indexed on 
            2012/11/19
            23:01 UTC
        
        
        Read the original article
        Hit count: 441
        
I've created the basis of a ray tracer, here's my testing function for drawing the scene:
public void Trace(int start, int jump, Sphere testSphere)
{
    for (int x = start; x < scene.SceneWidth; x += jump)
    {
        for (int y = 0; y < scene.SceneHeight; y++)
        {
            Ray fired = Ray.FireThroughPixel(scene, x, y);
            if (testSphere.Intersects(fired))
                sceneRenderer.SetPixel(x, y, Color.Red);
            else sceneRenderer.SetPixel(x, y, Color.Black);
        }
    }
}
SetPixel simply sets a value in a single dimensional array of colours. If I call the function normally by just directly calling it it runs at a constant 55fps. If I do:
Thread t1 = new Thread(() => Trace(0, 1, testSphere));
t1.Start();
t1.Join();
It runs at a constant 50fps which is fine and understandable, but when I do:
Thread t1 = new Thread(() => Trace(0, 2, testSphere));
Thread t2 = new Thread(() => Trace(1, 2, testSphere));
t1.Start();
t2.Start();
t1.Join();
t2.Join();
It runs all over the place, rapidly moving between 30-40 fps and sometimes going out of that range up to 50 or down to 20, it's not constant at all. Why is it running slower than it would if I ran the whole thing on a single thread? I'm running on a quad core i5 2500k.
© Stack Overflow or respective owner