zoukankan
html css js c++ java
应用程序中的所有线程都可以访问方法中的公用字段。要同步对公用字段的访问,您可以使用属性替代字段,并使用 ReaderWriterLock 对象控制访问。为此,请按照下列步骤操作:
using
System;
using
System.Threading;
namespace
MultiThreadApplication
{
class
Class1
{
private
ReaderWriterLock rwl
=
new
ReaderWriterLock();
private
long
myNumber;
public
long
Number
//
the Number property
{
get
{
//
Acquire a read lock on the resource.
rwl.AcquireReaderLock(Timeout.Infinite);
try
{
Console.WriteLine(
"
Thread:{0} starts getting the Number
"
, Thread.CurrentThread.GetHashCode());
Thread.Sleep(
50
);
Console.WriteLine(
"
Thread:{0} got the Number
"
, Thread.CurrentThread.GetHashCode());
}
finally
{
//
Release the lock.
rwl.ReleaseReaderLock();
}
return
myNumber;
}
set
{
//
Acquire a write lock on the resource.
rwl.AcquireWriterLock(Timeout.Infinite);
try
{
Console.WriteLine(
"
Thread: {0} start writing the Number
"
, Thread.CurrentThread.GetHashCode());
Thread.Sleep(
50
);
myNumber
=
value;
Console.WriteLine(
"
Thread: {0} written the Number
"
, Thread.CurrentThread.GetHashCode());
}
finally
{
//
Release the lock.
rwl.ReleaseWriterLock();
}
}
}
[STAThread]
static
void
Main(
string
[] args)
{
Thread[] threadArray
=
new
Thread[
20
];
int
threadNum;
Class1 Myclass
=
new
Class1();
ThreadStart myThreadStart
=
new
ThreadStart(Myclass.AccessGlobalResource);
//
Create 20 threads.
for
(threadNum
=
0
; threadNum
<
20
; threadNum
++
)
{
threadArray[threadNum]
=
new
Thread(myThreadStart);
}
//
Start the threads.
for
(threadNum
=
0
; threadNum
<
20
; threadNum
++
)
{
threadArray[threadNum].Start();
}
//
Wait until all the thread spawn out finish.
for
(threadNum
=
0
; threadNum
<
20
; threadNum
++
)
threadArray[threadNum].Join();
Console.WriteLine(
"
All operations have completed. Press enter to exit
"
);
Console.ReadLine();
}
public
void
AccessGlobalResource()
{
Random rnd
=
new
Random();
long
theNumber;
if
(rnd.Next()
%
2
!=
0
)
theNumber
=
Number;
else
{
theNumber
=
rnd.Next();
Number
=
theNumber;
}
}
}
}
说明了读写共享资源访问是不冲图的,如下图所示(这个方式解决了多个线程可同时读,只有一个线程可以定的操作的协调)
查看全文
相关阅读:
学习制作操作系统 0
阅读《C陷阱与缺陷》的知识增量
CSS 优先级和特指度
openCV2马拉松第19圈——Harris角点检測(自己实现)
Cacti监控mysql数据库server实现过程
ledisdb:支持类redis接口的嵌入式nosql
03005_SQL查询语句
通过smtp直接发送邮件
XML 解析默认去掉命名空间和注释
C# /VB.NET 创建PDF项目符号列表和多级编号列表
原文地址:https://www.cnblogs.com/snowball/p/388282.html
最新文章
区块链未来发展三大关键词,华为云如何见招拆招?
千亿云计算产业加速跑 多云管理助推上云率
无码系列-7-代码的语文修养_上篇
华为云工业智能体,做智能化最“硬核”
【Python成长之路】从 零做网站开发 -- 基于Flask和JQuery,实现表格管理平台
是什么造成了数据库的卡顿
熵推导
提高HBase写性能
HBase运维经验
HBase缓存的使用
热门文章
HDFS APPEND性能测试
Hbase问题
HBase中缓存的优先级
HBase中创建索引
多Region下HBase写入问题
Zookeeper管理多个HBase集群
codeforces Flipping Game 题解
Androidannotation使用之@Rest获取资源及用户登录验证(一)
玩转CSS3(一)----CSS3实现页面布局
Cocos2d-x 3.1.1 学习日志3--C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员
Copyright © 2011-2022 走看看