两个线程情况下 用mutex 对bitmap加锁却不管用
我想绘制mandelbrot集,用两个线程。分别绘制奇数列,偶数列。
但setpixel时候对bitmap的访问总是无法 互斥。 用 lock monitor mutex 都不行。
private static Bitmap t = new Bitmap(640, 480);
private Thread draw1 = null;
private Thread draw2 = null;
private static Mutex mutex = new Mutex();
private void Draw()
{
draw1 = new Thread(new ThreadStart(DrawMandelbrot_Odd));
draw2 = new Thread(new ThreadStart(DrawMandelbrot_Even));
draw1.Start();
draw2.Start();
pictureBox1.Image = t;
}
private void DrawMandelbrot_Odd()
{
for (int i = 0; i < pictureBox1.Width; i += 2)
{
for (int j = 0; j < pictureBox1.Height; j++)
{
int k;
for (k = 0; k < m_Times; k++)
{
。。。
}
Color c = 。。。;
lock (this)
{
mutex.WaitOne();
t.SetPixel(i, j, c);
mutex.ReleaseMutex();
}
}
}
}
private void DrawMandelbrot_Even()
{
for (int i = 1; i < pictureBox1.Width; i += 2)
{
for (int j = 0; j < pictureBox1.Height; j++)
{
x0 = 0;
y0 = 0;
double p = (double)pmin + dp * i;
double q = (double)qmin + dq * j;
int k;
for (k = 0; k < m_Times; k++)
{
getNextIter(iterTimes, x0, y0, p, q, out x, out y);
r = x * x + y * y;
x0 = x;
y0 = y;
if (r > m_Deep)
break;
}
red = 。。。;
green = 。。。;
blue = 。。。;
Color c = Color.FromArgb(red, green, blue);
lock (this)
{
mutex.WaitOne();
t.SetPixel(i, j, c);
mutex.ReleaseMutex();
}
}
}
}
总是在 t.SetPixel(i, j, c);处 出错, 说对象正在被使用。我少打了好多代码,