嗔秤戻幣�哉膵�云利匈嬉蝕湊蛸賜�塋床四衲���萩晦編報炎嘔囚^泡仟 ̄云利匈�《超噌�殻窟�嵌虜隆輓麈觚翹瀘卉韮�仍仍�。� 烏御危列
昂昂慕汐 卦指云慕朕村 厘議慕尺 厘議慕禰 TXT畠云和墮 序秘慕杏 紗秘慕禰

VB2008貫秘壇欺娼宥(PDF鯉塀哂猟井)-及170嫗

梓囚徒貧圭�鮗� ○ 賜 ★ 辛酔堀貧和鍬匈��梓囚徒貧議 Enter 囚辛指欺云慕朕村匈��梓囚徒貧圭�鮗� ● 辛指欺云匈競何��
!!!!隆堋響頼��紗秘慕禰厮宴和肝写偬堋響��




                          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
卦指朕村 貧匯匈 和匯匈 指欺競何 壘��1�� 家��1��
隆堋響頼��紗秘慕禰厮宴和肝写偬堋響��
梁椣戻幣�� 梁心弌傍議揖扮窟燕得胎��傍竃徭失議心隈才凪万弌誌育断蛍�輌臆惨軼僑〃�燕慕得珊辛參資誼持蛍才将刮襲潜��範寔亟圻幹慕得 瓜寡追葎娼得辛參資誼寄楚署衛、持蛍才将刮襲潜填��