[摘录]C#中的lock是什么关键字: 调用Monitor.Enter 和 Monitor.Exit 两个方法的简化语法,功能上其实现进入和退出某個对象的同步在通常情况下,可以通过lock是什么一个私有的引用成员变量来完成成员方法内的线程同步而通过...
lock是什么 关键字可以用来确保代码塊完成运行而不会被其他线程中断。它可以把一段代码定义为互斥段(critical section)互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待这是通过在代码块运行期间为给定对象获取互斥锁来实现的。
在多线程中每个线程都有自己的资源,但是代码区是共享的即每个线程都可以执行相同的函数。这可能带来的问题就是几个线程同时执行一个函数导致数据的混乱,产生不可预料的结果因此我們必须避免这种情况的发生。
而在.NET中最好了解一下进程、应用域和线程的概念因为lock是什么是针对线程一级的,而在.NET中应用域是否会对lock是什么起隔离作用我的猜想是,即不在同一应用域中的线程无法通过lock是什么来中断;另外也最好能了解一下数据段、代码段、堆、栈等概念
如果你想保护一个类的实例,一般地你可以使用this;如果你想保护一个静态变量(如互斥代码段在一个静态方法内部),一般使用类洺就可以了
而statement_block是什么就是互斥段的代码,这段代码在一个时刻内只可能被一个线程执行
二、简单解释一下执行过程
假设线程A先执行,線程B稍微慢一点线程A执行到lock是什么语句,判断obj是否已申请了互斥锁判断依据是逐个与已存在的锁进行中,字符串会被暂时存放如果兩个变量的字符串内容相同的话,.NET会把暂存的字符串对象分配给该变量所以如果有两个地方都在使用lock是什么(“my lock是什么”)的话,它们实际鎖住的是同一个对象到此,微软给出了个lock是什么的建议用法:锁定一个私有的static 成员变量
//确保只有一个线程使用资源,一个进入临界状態,使用对象互斥锁10个启动了的线程不能全部执行该方法 //如果没有加对象互斥锁,则可能10个线程都执行下面的减法加减法所耗时间片段非常小,可能多个线程同时执行出现负数。您会看到你需要改变_lock是什么Flag上的的每一个地方的,其中一个锁定你的目标可能会获得性换句话说,你将建立各地土特产一个洎定义锁系统
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。