程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB.NET >> vb.net的並發性問題

vb.net的並發性問題

編輯:VB.NET

當用戶在寫出多線程程序的時候,可能最具有挑戰性的就是獨立的線程和程序的其他的部分有並發性。例如,程序中的一個獨立的線程正在處理一系列的名稱,而程序的另一個部分必須等待這個線程完成以後才能進行,通常處理並發性的線程的辦法就是判斷線程的狀態或者通過一個事件去標志和得到一個特征值。
最簡單的,也是效率最低的方法就是判斷一個線程的IsAlive屬性的值,當一個線程在開始(Start)以前它的屬性IsAlive的值是"False",而在它運行的過程中,它的屬性IsAlive的值是"True"。這種方法並沒有通過一個事件去標志和得到一個特征值可靠,而且如果這樣做的慶,也失去了自由線程的很多優點和便利之處。例如:
while anotherthread.IsAlive=False
'一直等待到該線程開始
End While
'線程已經開始,現在等待它結束
'While anotherthread.IsAlive=True
'等待一直等待到線程結束
End While
'作一些線程結束以後的事情
一個更好的處理線程並發性的辦法就是使用事件,每一個線程都能夠運行一個事件把它自己的狀態以一個標志的形式給主程序一個值,或者是給其他一個線程一個具有標志自身狀態後個值,這樣當多個線程在運行一個過程的多個拷貝的時候,這些線程都具有自己特有的事件來標志各自的狀態,則在線程之處的程序的其他的部分,就可以通過運行這些事件,得到線程的信息,並且進行下一步的信息的處理。例如:
Public Event Status(Byval ThreaStatus As Integer,Byval ThreadID As Integer)
vb.net 提供了SyncLock表述來使得在一個expression中一些statements可以具有並發性,這保證了多個線程在運行時不在同一時間裡,運行相同的statements,當進入了SyncLock模塊,共享的方法System.Monitor.Enter將在特定的expression下運行,一直到這個特定的線程對expression返回的對象有exclusive Lock以後,模塊中的代碼才會停止運行。
注意:expression的類型必須是可引用的那種類型
補充:SyncLock表述

語法:
SyncLock expression
...[Block]
End SyncLock
參數:
expression
必需的參數,一個單獨的操作和值的集合,並能得到惟一的值。
功能:
SyncLock表述,能夠確保多線程不在同一個時間內,運行相同的statements,當一個線程運行到一個SyncLock模塊,並不是馬上就執行模塊裡的代碼,而是等到對expression返回的對象有鎖定(lock)的權力。這使得expression在幾個線程運行的時候改變了值,以至產生一些不可預料的錯誤。
注意:expression的類型必須是引用類型的,如一個類,一個模塊,一個接口等等。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved