I
Ian
Monitor::Enter and Monitor::Exit must be called in pairs. Is there a way
to determine if Monitor::Exit has been called so that it does not get called
a second time? The psuedocode below illustrates a situation I would like
to implement. Essentially there are 2 monitors and the first monitor can be
released in 2 different locations. This sample codes uses a booleen
variable to make certain the first monitor is not released twice. My
question is, does .NET offer a better way to check if a monitor object has
already been released/exited?
Thanks,
Ian
Monitor::Enter( resource1.Object );
Monitor::Enter( resource2.Object );
bool bMonitor1IsActive = true;
try {
// ...uses resources locked by resource1.Object and resource2.Object ,
may throw exceptions...
Monitor::Exit( resource1.Object );
bMonitor1IsActive = false;
// ...excute code locked to resource2.Object , may throw exceptions...
}
catch( Exception ^pE ) {
// ... handle exception ...
}
finally {
if( bMonitor1IsActive )
Monitor::Exit( resource1.Object );
Monitor::Exit( resource2.Object );
}
to determine if Monitor::Exit has been called so that it does not get called
a second time? The psuedocode below illustrates a situation I would like
to implement. Essentially there are 2 monitors and the first monitor can be
released in 2 different locations. This sample codes uses a booleen
variable to make certain the first monitor is not released twice. My
question is, does .NET offer a better way to check if a monitor object has
already been released/exited?
Thanks,
Ian
Monitor::Enter( resource1.Object );
Monitor::Enter( resource2.Object );
bool bMonitor1IsActive = true;
try {
// ...uses resources locked by resource1.Object and resource2.Object ,
may throw exceptions...
Monitor::Exit( resource1.Object );
bMonitor1IsActive = false;
// ...excute code locked to resource2.Object , may throw exceptions...
}
catch( Exception ^pE ) {
// ... handle exception ...
}
finally {
if( bMonitor1IsActive )
Monitor::Exit( resource1.Object );
Monitor::Exit( resource2.Object );
}