??? ????????? ?? deadlocks ?? ?????

???? ID: 317723 - ?? ???????? ?? ?????? ??? ?? ?? ???? ???? ???? ??.
??? ?? ??????? ???? | ??? ?? ??????? ????

?? ????? ??

??????

Visual Basic .NET ?? Visual Basic 2005 ???????? ??????? ???? ??? ?? ??? Visual Basic ????????? ??? ????? ???? ?? ?????? ??? ??????? introduce ???? ??? ????????? ?? deadlocks ??????? ???????? ???? ?? ???? explores ?? ?? ???????? ????

???? ???????

??? ??????

A??? ??????????? ?? ??????? ?? ?? ?? ??? ??? ?? ???? ?? ?? ????? ???? ??? ???? ????? ???? ??, ?? ????? ????? ?? ?? ?? ??? ???? ??? ????? ?? ???? ?? ????? ????? ?? ??? ??? ?? ???? ???????? ????, ?? ?? race ????? ???-?? ??? ???? ??? ????? ???? ?? ?? ????? ?? ???? ??? ?? ???? ??? ????? ?? ?? ????? ?? ????? ?? ????????, ??????? ????? ?? ????? ??? ?? ?? ????? ????? ??????

????? ?? ??????

???????? ????? ??? ?????????????? ??? ?? ?? ???????? ?? ????????? ???? ?? ??? ?????? ?? ??? ????? ?? ??? ?????? ???? ?? ??? ?? ??????? ?????? ???? ??, ?? ????? ?????? ????? ???? ?? ???? ???? ???? ???????? ?? ??, ?? ???????? ?? ???????? ???? ?? ???? ????? ??????? ???? ???

???? ?? ???? ??? ??? ??-?????? ??????? ???? ??? ?????????? ??? ????????? ???? ???? ?? ?? ????? ?? ??? ????? ?????? ?? ???? ????? ?? ??????? ???, ?? ????? ???? ?? ???? ?? ?????? ?? ??? ??????(?????? ?? ????????? ?? ??? ???DWORD ptr ds: [031B49DCh]??? ??????? ???)?

Visual Basic ???:
   'Thread 1
   Total = Total + val1
				
   'Thread 2
   Total = Total - val2
				
??????? ??? (?????? ???????) ?? ???? Visual Basic ??? ?? compilation ??:
 'Thread 1
 1.   mov         eax,dword ptr ds:[031B49DCh] 
 2.   add         eax,edi 
 3.   jno         00000033 
 4.   xor         ecx,ecx 
 5.   call        7611097F 
 6.   mov         dword ptr ds:[031B49DCh],eax 
				
 'Thread 2
 1.   mov         eax,dword ptr ds:[031B49DCh] 
 2.   sub         eax,edi 
 3.   jno         00000033 
 4.   xor         ecx,ecx 
 5.   call        76110BE7 
 6.   mov         dword ptr ds:[031B49DCh],eax 
				
??????? ??? ?? ??? ?? ?? ????? ???????? ?? ??? ???? ??? ???????? ?? ?????? ?????? ?? ?????? ?? ????????? ???? ?? ??? ????? ???? ?? ????? ?? ??? ??? ????? ???????? ?? ???? ??? ?? ????? ??? ?? ??? ???? ??????? ??? ?? ????????? ???? ??? ????? ?? ???? ??? ?? ???? ?? ??? ????????? ?? ?? ?? ??? ??????

??? ?? 100, val1 ?? 50 ?? val2 ?? 15 ??? ????? 1 ?? ????????? ???? ?? ???? ??????? ???? ??, ????? ???? 1 ?? 3 ????? ?? ???? ???? ??? ???? ???? ?? ??? ?? ????? 1 ?? ????? ?? ?????? ?????? ????? 1 ?? ???? ???? 150 ?? ??? ??? ????? ?? ??? ??????????? ??? ??? ????? 1 ??? ??? ??, ?? ??? ????? 2 ???? ??? ?? ????????? ???? ?? ??? ??????? ???? ??? ???? ???? ?? ?? ?? ?? ?? ???? ??? ?? ?? ??????? (85) ?? ???? ???? ?? ??? ?? ???? ???, 1 ????? ???????? regains ?? ???????? ???? ?? ???? ??? ?? ??? (150) ???? ???? ????? ??? ?????, 1 ????? ?? ?????? ???? ??, ??? ?? ??? ?? ?? 85 ?? ???? 150?

?? ??? ???? ??? ?? ?? ?? ???? ?? ??? ??? ??????? ??? ?? ?? banking ????????? ??, ?????? ???? ??? ?? ??? ???? ???? ?? ????? ???? ???? ??????

?? ?????? ????? ??, ?? ???? ??? ?? ???? ???? ???????? ?? ???? ???? ?? ??? 1 ????? ?? ??? ???? ?? ??????? ???????? ?? ??????? ?????? ???? ??, ?? ?? ????? 2 ???? ???????? ???? ?? ???? ???? ??? ?? ??????? ?? ?? ???? ??, ?? ?????? ??????? ???? ????? ????? ???????? nondeterministic ??, ????? ?? ??? ?? ???????? ?? ???? ????????? ???? ?? ???? ??? ?? ??? ?? ??????? ??? ???? ??? ???? ?????? differently ????????? ?? ???? ??? ??? ??, ?? ??? ???? ??? ?? ??? ?? ???????? ??? ???????? ????? ????????? ??, ?? ?????? ???? ???? ??? ?? randomness ???? ?? ????????? ???? ????? ?? ???? ???? ?? ????

??????? ?? ??? ?? ??? ????????? ?? ????? ?? ??? ?? ?? ???? ??? ??????? ???? ??, ?? ?? ??? ??? ???? ?? ????? ?? ????? ?? ???? ???? ?? ??? ??? ???? ?? sparingly, ??????? ??? ?? 1 ????? ??? ??????? ???? ??? ??, ?? 2 ????? ?? ?? ?????, ????? 2 ?? ???????? ????? ??? ????? 2 ?? ????? ?? ??? 1 ????? ?? ??? ????????? ???? ??? (???? ??????? ?? ??? ?? ???? ?? "??????" ??? ??? "SyncLock" ?????.)

?????

???? ??????? ????? ???? ??? ????????? ?? ??? ?????? ????? ?? ??? ???? ?? ?? ????????? ??? ??? ?? ????? ?? ????????? ?? ???? ?? unpredictability ?? ?????? ??? ?? ????? ??? sometime, ?? sometime ???? ????? ???? ???? ??? ?? ???????? ????? ??? ??? ??? ??????? ??, ??? ???????? ????? ???-??? ????????? ??, ?? ??? ???? ??? ???

Deadlocks

Adeadlock?? ???? ?? ?? ?? ??????? ???????? ?? ?? ?? ??? ??? ?? ????? ?? ??????? ???? ?? ?? ?? ??????? ???? ?? ?? ???? ????? ?? ??????? ???? ?? ?????? ????? ????????????, ???????? ????? ????????? ????? ?? ?? ?? ????? ?? ??? ???? ????? ?? ??? ????????? ???? ??? ??????? ?? ????? ?? ????? ?????, ??? ?? ???? ??, ?? ?? ?? ?? ??????? deadlocked ???? ???

????? ?? ??????

????? ??? ?? ?? ????????, LeftVal ?? RightVal ??:
'Thread 1
SyncLock LeftVal
 SyncLock RightVal
  'Perform operations on LeftVal and RightVal that require read and write.
 End SyncLock
End SyncLock
				
'Thread 2
SyncLock RightVal
 SyncLock LeftVal
  'Perform operations on RightVal and LeftVal that require read and write.
 End SyncLock
End SyncLock
				
??? deadlock ???? ?? ?? ????? 1 LeftVal ?? ??????? ???? ?? ?????? ??? ???????? ????? 1 ?? ???????? ??? ???? ?? ?? ???????? ????? 2 ?? ???? ???? ??? ????? 2 locks RightVal ?? ???? ??? tries LeftVal ?? ??????? ???? ?? ??? ??? LeftVal ??????? ???? ??? ??, ??????? ????? 2 ????? ?? ?? LeftVal ?????? ???? ?? ??? ????????? ???? ??? ????? 2 ??? ??? ??, ??????? ????? 1 ????????? ???? ???? ?? ?????? ??? ????? 1 RightVal ?? ??????? ???? ?? ?????? ???? ??, ????? ???? ???? ?? ???? ??, ??????? ????? 2 ??? ??????? ??? ????????????, 1 ????? ??????? RightVal ?????? ?? ???? ?? ?? ????????? ????? ????????? ???????? ????? ???? ???? ????? ?? ???, ??????? ?? ????? ?? ????? ????????? ?? ??? ?? ?? ??????? ??, ?? ?? ????? ?? ?? ?? ?? unlocking ???

??? deadlock ????? ??????? ???? ????? ????? 1 ????? locks ????????? ???? ?? ???????? ??? ??? ???? ?? ????, ??? ????? 1 ?? ???? ??? ???? ???????? ???? ?? ???? ??? ???? ?? ???????? ????? ????? 1 unlocks ?? ???, ?? ??? ????? 2 ?? ???? ??? ??? ??? ???? ???? ???????? ???????

?? ?????? obvious seems ?? ?? snippets ??? ?? ??? ?? ??? ??? ???? ???, ?????, ?????? ??? ??? ??? ???? ?? ???? ??????? ?? ???? ??? ?? ????????? ??? ??? ?? ?? ???? ????? ???????, ?? ?? ?? ??? ?? ??? ???????? ?? ???????? ?? ??? ?? ???? ?? ????? ???? ?? ??? ???????

?????

??????? ????? ???? deadlock ?? ?? ?? ????????? ?? ??????? ?? ???? ????? ???????? ?? ??? ??? ?? ?? ???? ?? ??????. ?? ?? ?? ?? ??????? ??? ?? ???? ????? ??????? ?? ?? ??? ???????? ????????? ??? ??????? ??? ????, ??????? ?? ????? ???? ?? ?????? ????? ?? ?? ?? ?? ?? ???? ??? ???? ????????? ???? ?? ???? ??? ??? ????????? ?? ?? ?? ????? ?? ???????? ????? ???? ?? ??? ?? ??????? ?? ????????? ?? ??? ???

???? ??? ????? ???? ???

??????????? ?? ???? ?? ???????? ?? ????????? ??? ?? ????????? ??????? ??????????? ?? ??? ???? ?? ??? ????? ???? ???? ??? ???????? ?????? ??????????? ?? ????????? ???? ??, ????? ??????? ???? ??? ????? ?? ???????? ?? ???? ???? ??? ????? ?? ??????? ?? ???????? ?? ??? allocates ????? ?? ??? ???????? ??? ???????? ??????? ???? ??? ????????? ??? ?????? ????? ?? ???????? ?? ?? ???? ???? ???????? ????? ??? ????? ????? handlers, priorities ?? ???????? ????? ??? ???????? ?? ??? ????? ???? ??? ?? ???? ???????? ????? ???? ?? ???? ??? ????? ?????? ?? ?????? ?? ??? ???????? ?????? ?? ????? ???? ???? ?? ?? ??? ??????? ???? ???? ???? ??? ????? ????? ???????? ??? ???? ??? ?? ?? ?? ?????? ?? held ??? ?????? ?? ????? ??? ???? ???????? ???? ???? ?? ??? ?????? ??? ??????? ????? ??? ?? ??????? ?? ???????? ??????? ?? ????? ????????? ?? ??? ????? ?? ???? ??? ????? ????? ??? ??? ????? ???

??????

???? ??????? ?? ??? ????? Visual Studio ??? ?? ??? ????? ??????:
  • SyncLock. ???? ???????? ?? ???? ??????? ???? ?? ??? ?????? ???? ??? ??? ???? ???? ????? ?? ???? ???????? ??????? ???? ?? ?????? ???? ??, ??? ????? ?? ?? ?? ?? ???? ????? releases. ?? ????? SyncLock ?????????????, ??????? ???????? ?? misuse SyncLock ?? ?????? ?? ???? ???? ?????? ?? ???, ?? ???? ???? ??? ????????? ?? ????? ????? deadlocks ?? ?????
  • InterLocked. ?? ?? ??? ???? ??? ?? ??? ???????? ?? ?????-???????? ???????? ?? ?????? ???? ???
???????? ??????? ?? ???, ???? ?? ???? ?????? ?? ????? ?? ???? ?? Microsoft ???????? ??? ?????::
316422???????: Visual Basic .NET ??? ???????? ?? ??? Roadmap
???? ??????? ?? ???, ????? MSDN ??? ???? ?????:
?? ?? ???????

???

???? ID: 317723 - ????? ???????: 04 ?????? 2010 - ??????: 2.0
???? ???? ???? ??:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
??????: 
kbvs2005swept kbvs2005applies kbinfo kbmt KB317723 KbMthi
???? ?????? ????????
??????????: ?? ???? ?? ???? ??????? ?? ????? ?? Microsoft ????-?????? ?????????? ?????? ?????? ???? ??? ??. Microsoft ???? ??? ????-???????? ?? ????-???????? ????? ?????? ?? ???? ???????? ???? ?? ???? ????? ????? ??? ?? ??? ?????? ?? ???? ???? ???? ??? ????? ??. ???????, ????-???????? ???? ????? ???? ???? ???? ???. ?????, ????????, ?????-???? ?? ??????? ?? ???????? ?? ???? ???, ???? ?? ??? ?????? ???? ???? ??? ????? ??? ?? ???? ??. Microsoft ??????? ??? ???? ?? ?????? ?? ??????????, ????????? ?? ??? ?????? ?? ???? ????? ?? ???? ???????? ?? ??? ???? ????? ?? ??? ????????? ???? ??. Microsoft ????-?????? ?????????? ?? ????? ?????? ?? ?? ??? ??.
?????????? ?? ??????? ????????? ??????? ??:317723

??????????? ???