我下面的代码为啥没有并发问题? 请哪位大神指导下
class Program
{
public Thread Threadone;
public Thread Threadtwo;
public event EventHandler EventRun;
public static object obj=new object();
ArrayList ListArry = new ArrayList();
private static void Main(string[] args)
{
var p = new Program();
p.Init();
Console.ReadKey();
}
private void Init()
{
Threadone=new Thread(AddArry);
Threadtwo = new Thread(ReadArry);
Threadone.Start();
Threadtwo.Start();
}
/// <summary>
/// 读取数据
/// </summary>
private void ReadArry()
{
for (int i = 0; i < ListArry.Count; i++)
{
lock (ListArry.SyncRoot)
{
Console.WriteLine(ListArry[i]);
}
Thread.Sleep(100);
}
Console.WriteLine("线程{0}读取完成", Thread.CurrentThread.Name);
EventRun+=Program_EventRun;
}
private void Program_EventRun(object sender, EventArgs e)
{
Threadtwo.Abort();
}
private void Program_EventRun1(object sender, EventArgs e)
{
Threadone.Abort();
}
/// <summary>
/// 写入数据
/// </summary>
private void AddArry()
{
var rand = new Random(1000);
for (int i = 0; i < 100; i++)
{
var num = rand.Next();
lock (ListArry.SyncRoot)
{
ListArry.Add(num);
}
Thread.Sleep(100);
}
Console.WriteLine("线程{0}写完成。", Thread.CurrentThread.Name);
EventRun += Program_EventRun1;
}
}
多线程编程的时候往往用到互斥锁与信号量使得线程同步,如果不按此方法进行安全编程,很有可能使得线程对境界资源访问的时候出现竞态。注意:我们需要达到的是线程同步,需要避免的是竞态。从你的提问中可以看出你对同步的概念并不太理解