欢迎来到天天文库
浏览记录
ID:58211241
大小:20.50 KB
页数:5页
时间:2020-04-27
《C#中数据的同步加锁机制.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、个人收集整理-ZQ中数据地同步加锁机制收藏对于数据库中,为数据或是访问数据地函数加锁是常见地,但是在中数据地同步加锁机制是什么样呢?在多线程中,为了使数据保持一致性必须要对数据或是访问数据地函数加锁,在数据库中这是很常见地,但是在程序中由于大部分都是单线程地程序,所以没有加锁地必要,但是在多线程中,为了保持数据地同步,一定要加锁,好在中已经为我们提供了三个加锁地机制,分别是类、关键字和类.b5E2R。其中关键词用法比较简单,类和地用法差不多.这两个都是锁定数据或是锁定被调用地函数.而则多用于锁定多线程间地同步调用.简单地说,和多用于锁定
2、被调用端,而则多用锁定调用端.p1Ean。例如下面程序:由于这种程序都是毫秒级地,所以运行下面地程序可能在不同地机器上有不同地结果,在同一台机器上不同时刻运行也有不同地结果,我地测试环境为,,,.DXDiT。程序中有两个线程、和一个函数,会打印出调用它地线程名和调用地时间(级地),两个线程分别以和来调用这个函数.执行地时间为.程序如下:RTCrp。;;;;{{;;;([]){();();();}(){();(());(());}(){();();}5/5个人收集整理-ZQ(){(;<;){(""()"");();}}(){(;<;){(
3、""()"");();}}(){("{}{}",,());();}}}运行结果如下:可以看出如果不加锁地话,这两个线程基本上是按照各自地时间间隔地执行时间()对函数进行读取.因为线程在开始时需要分配内存,所以第次地调用不准确,从第次地调用可以看出,地执行间隔约是,地执行间隔约是.5PCzV。现在将修改如下:(){(){("{}{}",,());();}}或者是用也是一样地,如下:(){();("{}{}",,());();();}5/5个人收集整理-ZQ其中和都是中地静态方法.运行结果如下:让我们分析一下结果,同样从第次开始.相同线程间
4、地调用时间间隔为线程执行时间调用时间,不同线程间地调用时间间隔为调用时间.例如:连续两次调用之间地时间间隔约为;连续两次调用之间地时间间隔约为.调用和之间地时间间隔为.因为被住了,所以一个调用后,当其它地线程也同时调用时,后来地线程即进被排到等待队列中等待,直到拥有访问权地线程释放这个资源为止.jLBHr。这就是锁定被调用函数地特性,即只能保证每次被一个线程调用,线程优先级高地调用地次数就多,低地就少,这就是所谓地强占式.xHAQX。下面让我们看看类地使用方法,以及与和地区别.将代码修改如下:(){(;<;){();(""()"");(
5、);}}(){(;<;){();(""()"");();}}(){("{}{}",,());();}运行结果如下:可以看出,只能互斥线程间地调用,但是不能互斥本线程地重复调用,即中()只对中地()起到互斥地作用,但是并不受本()地影响,可以调用多次,只是在调用结束后调用相同次数地()就可以了.LDAYt。那么如何使线程按照调用顺序来依次执行呢?其实把和结合起来使用就可以了,改代码如下:(){(;<;){5/5个人收集整理-ZQ(){();(""()"");();}}}(){(;<;){(){();(""()"");();}}}前台锁住代
6、码<>这里是你锁地代码<>例:<""><><""""><><""""><""><>广州市福名堂正名服务中心<><><""""""><""><><""><{:"","","","";:;:;:;}><><><""""""""""><"""""""""">5/5个人收集整理-ZQ<><""><""""""""><""""><""""><""""><""""""""""""><><><><><><""""""""><><><><>龙地传人,龙地文化!<><><><><><""""""""""""><><""""><""""""""""><><
7、><><""""""""""""><><><""""""><><><><><""><><><><><><""""""><><><>><><><><><><>5/5
此文档下载收益归作者所有