中国地图
GIS探索者
地图网
GIS论坛
网站首页
:
|
GIS论坛
|
新闻动态
|
技术专栏
|
GIS书籍
|
资源下载
|
求职招聘
|
研究生考试
|
GIS博客
|
GIS空间站
欢迎光临GIS空间站!
网站
地图
专栏导航:|
ArcGIS
|
MapInfo
|
TopMap
|
地理信息
|
遥感
|
GPS
|
测绘
|
WebGIS
|
LBS
|
前沿
|
数据库
|
开发
|
行业应用
推荐栏目:|
AO开发
|
业界动态
|
GIS资源
|
招聘信息
|
求职简历
|
共享软件
|
电子书籍
|
研究生考题
|
电子期刊
|
GIS论文
您现在的位置:
GIS空间站
>>
技术专栏
>>
开发语言
>> 文章正文
C#多线程编程实例实战
作者:刘弹 文章来源:ASPCool 点击数: 更新时间:2007-2-2
单个写入程序/多个阅读程序在.Net类库中其实已经提供了实现,即System.Threading.ReaderWriterLock类。本文通过对常见的单个写入/多个阅读程序的分析来探索c#的多线程编程。
问题的提出
所谓单个写入程序/多个阅读程序的线程同步问题,是指任意数量的线程访问共享资源时,写入程序(线程)需要修改共享资源,而阅读程序(线程)需要读取数据。在这个同步问题中,很容易得到下面二个要求:
1) 当一个线程正在写入数据时,其他线程不能写,也不能读。
2) 当一个线程正在读入数据时,其他线程不能写,但能够读。
在数据库应用程序环境中经常遇到这样的问题。比如说,有n个最终用户,他们都要同时访问同一个数据库。其中有m个用户要将数据存入数据库,n-m个用户要读取数据库中的记录。
很显然,在这个环境中,我们不能让两个或两个以上的用户同时更新同一条记录,如果两个或两个以上的用户都试图同时修改同一记录,那么该记录中的信息就会被破坏。
我们也不让一个用户更新数据库记录的同时,让另一用户读取记录的内容。因为读取的记录很有可能同时包含了更新和没有更新的信息,也就是说这条记录是无效的记录。
实现分析
规定任一线程要对资源进行写或读操作前必须申请锁。根据操作的不同,分为阅读锁和写入锁,操作完成之后应释放相应的锁。将单个写入程序/多个阅读程序的要求改变一下,可以得到如下的形式:
一个线程申请阅读锁的成功条件是:当前没有活动的写入线程。
一个线程申请写入锁的成功条件是:当前没有任何活动(对锁而言)的线程。
因此,为了标志是否有活动的线程,以及是写入还是阅读线程,引入一个变量m_nActive,如果m_nActive > 0,则表示当前活动阅读线程的数目,如果m_nActive=0,则表示没有任何活动线程,m_nActive <0,表示当前有写入线程在活动,注意m_nActive<0,时只能取-1的值,因为只允许有一个写入线程活动。
为了判断当前活动线程拥有的锁的类型,我们采用了线程局部存储技术(请参阅其它参考书籍),将线程与特殊标志位关联起来。
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
下一页
文章录入:gissky 责任编辑:gissky
【
发表评论
】【
加入收藏
】【
告诉好友
】【
打印此文
】【
关闭窗口
】
■■相 关 图 书:
■■相 关 文 章:
[原创]基于高斯投影的经纬度转化等功能C#源码
C#操作Word文档(Office 2007)
上一篇文章:
C#操作Word文档(Office 2007)
下一篇文章:
[原创]基于高斯投影的经纬度转化等功能C#源码
GIS博客精华
热点文章
热门资源
关于我们
|
联系我们
|
广告服务
|
友情链接
|
申请链接
|
合作联盟
|
诚聘英才
GIS空间站(GISSky.Net)版权所有 站长:
兔八哥