首页 / C# / lock与C#多线程
lock与C#多线程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了lock与C#多线程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1956字,纯文字阅读大概需要3分钟。
内容图文
lock与C#多线程
</strong> keyword marks a statement block as a critical section by obtaining the mutual-exclusion lock for a given object, executing a statement, and then releasing the lock.">lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。简单讲就类似于 你去银行办理业务,一个柜台一次只能操作以为客户,而如果你要到这个柜台办理业务就必须等前面的人的业务完成,而彼此之间不会有交集。下面通过具体的代码来深入说明:
using
System;
using
System.Threading;
namespace
LockTest
{
class
Program
{
static
void
Main()
{
Test test = new Test();
Thread one = new Thread(test.ThreadOne); //线程一调用test的 ThreadOne 方法
Thread two = new Thread(test.ThreadTwo); //线程而调用test的 ThreadTwo 方法
one.Start(); //启动线程一
two.Start(); //启动线程二 Console.ReadKey();
}
}
class LockTest
{
publicint Number { get; set; } = 10;
publicvoid Print()
{
Console.WriteLine("The number is " + Number);
}
}
class Test
{
privatereadonly LockTest _lockTest = new LockTest(); //用于测试的对象publicvoid ThreadOne()
{
//在此方法内锁定 _lockTest 所引用的对象并执行相应操作,在操作执行完以前不会释放次对象lock (_lockTest)
{
Console.WriteLine("The object has been locked!");
Thread.Sleep(5000); //让当前线程休眠 5s
_lockTest.Number = 200;
Console.Write("ThreadOne: ");
_lockTest.Print();
}
//操作完成并释放对象
Console.WriteLine("The object has been released!");
}
publicvoid ThreadTwo()
{
//Console.WriteLine(_lockTest.Number);
_lockTest.Number = 100;
//Console.WriteLine(_lockTest.Number);
//锁定 _lockTest 所引用的对象
//如果要保证 lock 正常工作,所有对 _lockTest 的操作都要使用 lock 锁定
//比如上面 _lockTest.Number=100; 在 lock 外面,那么它将不受约束(即可以强制访问 _lockTest)
//如果在上面语句后加 Console.WriteLine(_lockTest.Number); 那么将输出 100 而不是 200 (也不是 10)lock (_lockTest)
{
//_lockTest.Number=100;
Console.Write("ThreadTwo: ");
_lockTest.Print();
}
}
}
}
运行上面的代码会发现在ThreadTwo 方法里的 lock内的代码 时有明显的延迟,即必须等到ThreadOne运行完成了才继续执行 lock内部的代码,而且输出的结果是200而不是100,说明 lock 外面的代码不会发生任何延迟。如果把 _lockTest.Number=100; 语句放在lock内部,会发现结果变成了 100 。
通过上面的例子可以看出要保证 lock 正确工作,要对每个 _lockTest 的操作加上 lock锁定 。而在程序运行的时候,会根据线程访问次对象的先后顺序来为每个线程排序,且只有排在前面的线程对对象的操作完成了后面的对象才能访问此对象。
原文:http://www.cnblogs.com/SilentCode/p/5135455.html
内容总结
以上是互联网集市为您收集整理的lock与C#多线程全部内容,希望文章能够帮你解决lock与C#多线程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。