diff options
Diffstat (limited to 'ACE/examples/APG/Threads/Mutexes.cpp')
-rw-r--r-- | ACE/examples/APG/Threads/Mutexes.cpp | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/ACE/examples/APG/Threads/Mutexes.cpp b/ACE/examples/APG/Threads/Mutexes.cpp new file mode 100644 index 00000000000..ca5ebcdcbe4 --- /dev/null +++ b/ACE/examples/APG/Threads/Mutexes.cpp @@ -0,0 +1,75 @@ +// $Id$ + +#include "ace/config-lite.h" +#if defined (ACE_HAS_THREADS) + +#include "ace/Synch.h" +#include "ace/Task.h" + +// Listing 1 code/ch12 +class HA_Device_Repository +{ +public: + HA_Device_Repository () + { } + + void update_device (int device_id) + { + mutex_.acquire (); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t) Updating device %d\n"), + device_id)); + ACE_OS::sleep (1); + mutex_.release (); + } + +private: + ACE_Thread_Mutex mutex_; +}; +// Listing 1 +// Listing 2 code/ch12 +class HA_CommandHandler : public ACE_Task_Base +{ +public: + enum {NUM_USES = 10}; + + HA_CommandHandler (HA_Device_Repository& rep) : rep_(rep) + { } + + virtual int svc (void) + { + ACE_DEBUG + ((LM_DEBUG, ACE_TEXT ("(%t) Handler Thread running\n"))); + for (int i=0; i < NUM_USES; i++) + this->rep_.update_device (i); + return 0; + } + +private: + HA_Device_Repository & rep_; +}; + +int ACE_TMAIN (int, ACE_TCHAR *[]) +{ + HA_Device_Repository rep; + HA_CommandHandler handler1 (rep); + HA_CommandHandler handler2 (rep); + handler1.activate (); + handler2.activate (); + + handler1.wait (); + handler2.wait (); + return 0; +} +// Listing 2 + +#else +#include "ace/OS_main.h" +#include "ace/OS_NS_stdio.h" + +int ACE_TMAIN (int, ACE_TCHAR *[]) +{ + ACE_OS::puts (ACE_TEXT ("This example requires threads.")); + return 0; +} + +#endif /* ACE_HAS_THREADS */ |