<< 前へ        次へ >>

ID : 5038

排他処理のプログラム例3

エラーによって排他処理が中断された場合の対処例です。Pro1-> Pro2が順に実行され、常に I1,I2,I3が連番になるように排他します。エラーが起った場合は復帰処理によって不整合な状態に対処しています。

'!TITLE "排他処理プログラム例3"
' プログラム名 "Pro1"
Sub Main

 Dim n as integer
 Dim id as integer
 id = CreateMutex( "Mutex-A" )

	For n = 3 To -3 Step -1
	 
	 TakeMutex id

	 '乱数で不整合な状態にする
	 I1 = rnd*100
	 I2 = rnd*100
	 I3 = rnd*100

	  Run Pro2

	  I1 = 1
	  I2 = 2

	  ' エラーが発生することで不整合な状態を擬似的に作成する
	  I0 = I0 / n ' ゼロ割 、エラーにより Mutexオブジェクトがエラー状態になります。

	  I3 = 3

	 GiveMutex id
	 
	Next

 ' I1から連番にする

 DeleteMutex id

End Sub
'!TITLE "排他処理プログラム例3"
' プログラム名 "Pro2"
Sub Main

 Dim id as integer
 id = CreateMutex( "Mutex-A" )

 On Error Goto MutexErr

 TakeMutex id ' Mutexオブジェクトがエラー状態の場合、エラーが発生します

  PrintDbg I1, I2, I3 '必ず連番である必要がある

 GiveMutex id

 DeleteMutex id

 Exit Sub

MutexErr:

 '整合があった状態にセット(一例)
  I1 = 1
  I2 = 2
  I3 = 3
 
 ResetMutex id 'エラー状態をリセット
 Resume 'もう一度エラーが起った箇所からやり直し

End Sub

ID : 5038

<< 前へ        次へ >>