HOSSEINGHOLI
یک شنبه 02 خرداد 1389, 12:23 عصر
با سلام
من از کد زیر از مانیتور برای حل مشکل Race Condition استفاده میکنم ولی پیغام خطا میده
باید چیکار کنم؟
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace RaceCondition
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string s=" ";
Thread t1, t2;
private void button1_Click(object sender, EventArgs e)
{
t1 = new Thread(f1);
t2 = new Thread(f2);
t1.Start();
t2.Start();
while (t1.IsAlive||t2.IsAlive)
{
Thread.Sleep(50);
}
for (int i = 0; i < s.Length; i++)
{
if (s[i]=='n')
{
listBox1.Items.Add("");
}
else
{
listBox1.Items[listBox1.Items.Count-1]+=s[i].ToString();
}
}
}
Random r = new Random();
void f1()
{
Thread.Sleep(r.Next(2));
System.Threading.Monitor.Enter(s);
for (int i = 1; i <= 100; i+=2)
{
Thread.Sleep(r.Next(2));
s += 'n';
Thread.Sleep(r.Next(2));
s += "T1 ";
Thread.Sleep(r.Next(2));
s += i.ToString() + " ";
Thread.Sleep(r.Next(2));
s += i.ToString() + " ";
Thread.Sleep(r.Next(2));
s += i.ToString() + " ";
Thread.Sleep(r.Next(2));
System.Threading.Monitor.Exit(s);
}
Thread.Sleep(r.Next(2));
}
void f2()
{
Thread.Sleep(r.Next(2));
System.Threading.Monitor.Enter(s);
for (int i = 2; i <= 100; i += 2)
{
Thread.Sleep(r.Next(2));
s += 'n';
Thread.Sleep(r.Next(2));
s += "T2 ";
Thread.Sleep(r.Next(2));
s += i.ToString() + " ";
Thread.Sleep(r.Next(2));
s += i.ToString() + " ";
Thread.Sleep(r.Next(2));
s += i.ToString() + " ";
Thread.Sleep(r.Next(2));
System.Threading.Monitor.Exit(s);
}
Thread.Sleep(r.Next(2));
}
}
}
من از کد زیر از مانیتور برای حل مشکل Race Condition استفاده میکنم ولی پیغام خطا میده
باید چیکار کنم؟
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace RaceCondition
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string s=" ";
Thread t1, t2;
private void button1_Click(object sender, EventArgs e)
{
t1 = new Thread(f1);
t2 = new Thread(f2);
t1.Start();
t2.Start();
while (t1.IsAlive||t2.IsAlive)
{
Thread.Sleep(50);
}
for (int i = 0; i < s.Length; i++)
{
if (s[i]=='n')
{
listBox1.Items.Add("");
}
else
{
listBox1.Items[listBox1.Items.Count-1]+=s[i].ToString();
}
}
}
Random r = new Random();
void f1()
{
Thread.Sleep(r.Next(2));
System.Threading.Monitor.Enter(s);
for (int i = 1; i <= 100; i+=2)
{
Thread.Sleep(r.Next(2));
s += 'n';
Thread.Sleep(r.Next(2));
s += "T1 ";
Thread.Sleep(r.Next(2));
s += i.ToString() + " ";
Thread.Sleep(r.Next(2));
s += i.ToString() + " ";
Thread.Sleep(r.Next(2));
s += i.ToString() + " ";
Thread.Sleep(r.Next(2));
System.Threading.Monitor.Exit(s);
}
Thread.Sleep(r.Next(2));
}
void f2()
{
Thread.Sleep(r.Next(2));
System.Threading.Monitor.Enter(s);
for (int i = 2; i <= 100; i += 2)
{
Thread.Sleep(r.Next(2));
s += 'n';
Thread.Sleep(r.Next(2));
s += "T2 ";
Thread.Sleep(r.Next(2));
s += i.ToString() + " ";
Thread.Sleep(r.Next(2));
s += i.ToString() + " ";
Thread.Sleep(r.Next(2));
s += i.ToString() + " ";
Thread.Sleep(r.Next(2));
System.Threading.Monitor.Exit(s);
}
Thread.Sleep(r.Next(2));
}
}
}