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