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;
}
}
}
}
说明了读写共享资源访问是不冲图的,如下图所示(这个方式解决了多个线程可同时读,只有一个线程可以定的操作的协调)
查看全文
相关阅读:
令人眼花缭乱的XP封面:)
GT3.9.5中新增的DRS服务
4月12日后WinXP系统将会强制下载SP2(zz)
全球手机排名出炉 摩托三星西门子位置调整(zz)
元宵佳节,悬谜竞猜
Laszlo平台简介(zz)
笔记本市场见闻
最近Wallop好像较难上去啊
Dell再次表示不采用AMD处理器(zz)
Media Player Classic 6.4.8.3发布(zz)
原文地址:https://www.cnblogs.com/snowball/p/388282.html
最新文章
Linux琐碎记录之统计源码的行数
leveldb之编译顺序导致的邪门问题。
C语言算法碎碎记录之“一圈人,数到几的人就出去,最后一个是几号”
行业软件之PTV微观软件VISSIM4.3 5.0 5.1 5.2 5.3 5.4下载和相关资料
C++之使用C的代码。由C向C++过度
生活琐碎之淘宝账号安全和交易安全1账号被盗用,淘宝被别人卖东西
eclipse零碎记录之linux下的eclipse(cdt)Makefile项目的配置
nosql之leveldb之概况
软件之Notepad++已停止工作(win7,unicode版本,插件问题)
C语言琐碎记录之#define宏的用法【顺便提提 __FILE__,__LINE__的用法】
热门文章
linux琐碎记录之 numberLock指示灯设置
linux多线程编程之线程安全 mutex锁的使用
开题——网格数据传输及管理的研究背景:)
令人眼花的笔记本代号
发现在博客园排名68,继续努力中……
忙了一天,不知所措
各种奇怪的邀请
EMail Icon Generator
Google Help: Cheat Sheet
今天投出了第一篇英文论文
Copyright © 2011-2022 走看看