Monitor。Wait(elements; 1000)
Loop
items = elements。ToArray()
Monitor。Exit(elements)
Dim item As Integer
For Each item In items
Console。WriteLine(〃Item (〃 & item & 〃)〃)
Thread。Sleep(1000)
Next
End Sub
Sub Task2()
Monitor。Enter(elements)
elements。Add(30)
Monitor。Pulse(elements)
Monitor。Exit(elements)
End Sub
The bolded code lines are the new pieces that use the Monitor type。 In the definition of the
first thread to get the lock; the Monitor。Enter() method is called with the parameter elements;
which; as in the earlier SyncLock example; defines the lock reference handle。 Once the lock has
been acquired; the thread checks to see if the list count is greater or equal to 3。 If the counter is
less than 3; the Monitor。Wait() method is called。 The behavior of Monitor。Wait() is similar to
Thread。Sleep(); except that the Monitor lock is given up。
Releasing the lock is a unique feature of a Monitor。 The lock is given up only during the
time that the caller is in Monitor。Wait()。 When the Monitor。Wait() method returns; the lock is
acquired again。 The code says that the thread is reawakened after 1 second。 After that second;
the thread does not have the lock and needs to wait before it can acquire the lock。 If another
thread is holding onto the lock for a long time; it could take a while to get the lock back again。
Another way for the Monitor。Wait() method to awaken is if a signal is sent by another
thread。 The code for the second thread uses Enter() and Exit(); but also Pulse()。 The Monitor。
Pulse() method triggers a signal that awakens the first thread; but the first thread will execute
only after the second thread has released control of the lock。
The big advantages of a Monitor in parison to SyncLock are that the Monitor can be
used anywhere in the code and that the Monitor will release a lock while waiting for an answer。
You would use SyncLock when you want to control access to a block of code。 If the access goes
beyond method boundaries; then it is preferable to use Monitor。 It is not that you could not use
a SyncLock that spanned boundaries; but if you need to add code that could produce a dead
lock; it is easier to control that code using a Monitor。
Now that we’ve covered the fundamentals of multithreading; the next sections focus on
more advanced threading architectures—reader/writer and producer/consumer—and using
asynchronous calls。
…………………………………………………………Page 381……………………………………………………………
C HA P TE R 1 3 ■ L E AR N IN G AB O U T M U L T IT HR E AD IN G 359
Implementing a Reader/Writer
Threaded Architecture
The reader/writer threaded architecture is based on the idea that if one thread is reading and
another thread would like to read as well; why not let it? However; if one thread wants to write;
then only that thread can write。 In other words; multiple threads are allowed to read data
simultaneously; but to write; a thread must have an exclusive lock。
implements a System。Threading。ReaderWriterLock class; which contains the reader/
writer functionality。 This class is like a Monitor; in that it gives you the control to manage how
data is accessed but does not determine what you are accessing。 The ReaderWriterLock type
has a number of methods and properties。 The most important ones are listed in Table 13…1。
Table 13…1。 Important ReaderWriterLock Methods
Method Description
AcquireReaderLock() Acquires a reader lock。 Multiple threads can acquire a
reader lock。
AcquireWriterLock() Acquires a writer lock。 Only a single thread can acquire
a writer lock。
DowngradeFromWriterLock() Converts a writer lock into a reader lock。 Using this
method avoids the need to call ReleaseWriterLock()
and AcquireReaderLock()。
UpgradeToWriterLock() Converts a reader lock into a writer lock。 Using this
method avoids the need to call ReleaseReaderLock()
and AcquireWriterLock()。
ReleaseLock() Releases all locks; regardless how many times you have
called to acquire the reader or writer locks。
ReleaseReaderLock() Decrements the reader lock a single count。 To pletely
release a reader lock; you need to make sure the number
of times you called ReleaseReaderLock() is equal to the
number of times you called AcquireReaderLock()。
ReleaseWriterLock() Decrements the writer lock a single count。 To pletely
release a reader lock; you need to make sure the number
of times you called ReleaseWriterLock() is equal to the
number of times you called AcquireWriterLock()。
Let’s look at a collection example that ha
小说推荐
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 最新章:第37章
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 最新章:第295章
- 深入浅出MFC第2版(PDF格式)
- -Page 1-Page 2-山高月小山高月小 水落石出水落石出山高月小山高月小 水落石出水落石出-Page 3-深入淺出MFC(第版 使用Visual C 5.0 MFC 4.2)Dissecting MFC(Second Edition Using Visual C 5.0 MFC 4.2)侯俊
- 最新章:第309章
- VC语言6.0程序设计从入门到精通
- -Page 1-Visual C 6.0 程序设计从入门到精通求是科技 王正军 编著
- 最新章:第136章
- SQL 21日自学通(V3.0)(PDF格式)
- -Page 1-SQL 21 日自学通(V1.0 翻译人 笨猪目录目录 1译者的话 14第一周概貌 16从这里开始 16
- 最新章:第170章
- 2008年青年文摘精编版
- 作者:中国青年出版社“初恋”的惩罚.作者:凡 凡 文章来源《真情》2005年第4期 点击数:6608 更新时间:2005-6-5过了年,我就十八岁了。离高考只剩下四个多月了。这一段,班里的男女生相互间递纸条、写情书、约会等地下活动慢慢的多了起来。我这个“尖子生”也突然感到了不安、慌乱,并且自责。不知
- 最新章:第230章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 最新章:第28章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 最新章:第27章