diff options
Diffstat (limited to 'examples/APG/Threads/Guards.cpp')
-rw-r--r-- | examples/APG/Threads/Guards.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/examples/APG/Threads/Guards.cpp b/examples/APG/Threads/Guards.cpp new file mode 100644 index 00000000000..75c40c98594 --- /dev/null +++ b/examples/APG/Threads/Guards.cpp @@ -0,0 +1,52 @@ +// $Id$ + +#if 0 + +// Listing 1 code/ch12 +int +HA_Device_Repository::update_device (int device_id) +{ + this->mutex_.acquire (); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) Updating device %d\n"), + device_id)); + + // Allocate a new object. + ACE_NEW_RETURN (object, Object, -1); + // ... + // Use the object + + this->mutex_.release (); +} +// Listing 1 +// Listing 2 code/ch12 +int +HA_Device_Repository::update_device (int device_id) +{ + // Construct a guard specifying the type of the mutex as + // a template parameter and passing in the mutex to hold + // as a parameter. + ACE_Guard<ACE_Thread_Mutex> guard (this->mutex_); + + // This can throw an exception that is not caught here. + ACE_NEW_RETURN (object, Object, -1); + // .. + // Use the object. + // .. + // Guard is destroyed, automatically releasing the lock. +} +// Listing 2 +// Listing 3 code/ch12 +int +HA_Device_Repository::update_device (int device_id) +{ + ACE_GUARD_RETURN (ACE_Thread_Mutex, mon, mutex_, -1); + + ACE_NEW_RETURN (object, Object, -1); + // Use the object. + // ... +} +// Listing 3 + +#endif /* 0 */ +int main (int, char *[]) +{ return 0; } |