可以参考下面用法:
Array myArray = new int[] { 1, 2, 4 };
lock(myArray.SyncRoot)
{
foreach (Object item in myArray)
Console.WriteLine(item);
}
Array myArray = new int[] { 1, 2, 4 };
lock(myArray.SyncRoot)
{
foreach (Object item in myArray)
Console.WriteLine(item);
}
解决方案 »
- 赐教:为何不能再命令行中输入参数?
- C# 代 码 如 何 实 现 GAC 注 册
- 关于桌面应用程序打印(最好是套打)
- 玩过的朋友们进来帮帮我
- 用c#实现短信提醒功能
- 如何利用Asp.net(C#)来读取word文档?详情见内!
- DataTable的主键问题
- MSDN04年10月版怎么改DVD了?有没有CD版啊?
- 大家看CSDN的2003年4月所登出的 SilderWinder的信息了吗?Borland公司的C#编译器,同时还要捆绑Together for C#。你会转向使用SilderWind
- 大俠們,拷貝到你的機器上幫我調試一下﹐我實在找不到原因了。
- MVC中的Controller如果太多,分层怎么配置?
- 还是sql语句,困惑了很长时间。。。
public partial class Form1 : Form
{
public static object[] oba = new object[2];
public Form1()
{
InitializeComponent();
oba[0] = new object();
oba[1] = new object();
} private void Form1_Load(object sender, EventArgs e)
{
Thread t1 = new Thread(new ThreadStart(accessoba1));
Thread t2 = new Thread(new ThreadStart(accessoba2));
t1.Start();
t2.Start();
} private void accessoba1()
{
for (int i = 0; i < 1000000; i++)
{
DateTime dt1 = DateTime.Now;
oba[0].ToString();
TimeSpan ts = DateTime.Now - dt1;
if (ts.TotalMilliseconds > 0)
{
System.IO.File.AppendAllText("c:\\TestResult1.txt", ts.TotalMilliseconds.ToString() + Environment.NewLine);
}
}
}
private void accessoba2()
{
for (int i = 0; i < 1000000; i++)
{
DateTime dt1 = DateTime.Now;
oba[1].ToString();
TimeSpan ts = DateTime.Now - dt1;
if (ts.TotalMilliseconds > 0)
{
System.IO.File.AppendAllText("c:\\TestResult2.txt", ts.TotalMilliseconds.ToString() + Environment.NewLine);
}
}
}
TestResult1.txt:
10.0144
10.0144
10.0144
10.0144
10.0144
10.0144
10.0144
10.0144
10.0144
10.0144
10.0144
10.0144
10.0144
10.0144
10.0144
110.1584
10.0144
10.0144
10.0144
10.0144
110.1584
10.0144
10.0144
10.0144
10.0144
110.1584
10.0144
10.0144
10.0144
10.0144
10.0144
10.0144
130.1872
10.0144
20.0288
20.0288
10.0144
10.0144
10.0144
10.0144
20.0288
10.0144
10.0144
10.0144
10.0144
10.0144
10.0144
20.0288
10.0144
10.0144
10.0144
10.0144
10.0144
10.0144
10.0144
20.0288
10.0144
20.0288
50.072
10.0144
70.1008
10.0144
60.0864
60.0864
30.0432
10.0144
10.0144
{
public static int Total = 10000000; public static object[] obj = new object[Total]; static void Main(string[] args)
{
Thread[] trd = new Thread[2];
for (int i = 0; i < trd.Length; i++) {
trd[i] = new Thread(work);
trd[i].Start(i);
}
} static void work(object i)
{
while (true) {
DateTime d1 = DateTime.MinValue;
DateTime d2 = DateTime.MinValue;
lock (obj.SyncRoot)//自己体会下有和没有lock的区别
{
d1 = System.DateTime.Now; for (int j = 0; j < obj.Length; j++)
{
if (j % 2 == (int)i)
{
{
obj[j] = new object();
}
}
}
d2 = System.DateTime.Now;
}
TimeSpan ts = d2 - d1;
{
Console.WriteLine(string.Format("No.{0} work from {1} to {2} used {3}",
i, d1.ToString("HH:mm:ss ffff"), d2.ToString("HH:mm:ss ffff"), ts.TotalMilliseconds));
} Console.ReadLine();
}
}
}