source: Sophya/trunk/SophyaExt/JThreadsC++/JTCSrc/JTC/Sync.h@ 2016

Last change on this file since 2016 was 1016, checked in by ansari, 25 years ago

Creation du module JThreadsC++, importation du code des classes
de Thread a la Java de Object Oriented Concepts Inc - Reza 19/5/2000

File size: 1.9 KB
Line 
1// **********************************************************************
2//
3// Copyright (c) 2000
4// Object Oriented Concepts, Inc.
5// Billerica, MA, USA
6//
7// All Rights Reserved
8//
9// **********************************************************************
10
11#ifndef JTC_SYNC_H
12#define JTC_SYNC_H
13
14//
15// This class is used to lock and unlock a monitor.
16//
17class JTCSynchronized
18{
19 //
20 // Hide copy constructor and assignment operator.
21 //
22 JTCSynchronized(const JTCSynchronized&);
23 void operator=(const JTCSynchronized&);
24
25 const JTCMonitor* mon_; // Associated monitor.
26 const JTCMutex* mut_; // Associated mutex.
27 const JTCRecursiveMutex* nrmut_; // Associated recursive mutex.
28
29 enum
30 {
31 LOCKED_MONITOR,
32 LOCKED_MUTEX,
33 LOCKED_RECURSIVE_MUTEX
34 }
35 lockType_; // The lock type
36
37public:
38
39 JTCSynchronized(const JTCMonitor& mon);
40 JTCSynchronized(const JTCMonitor& mon, bool internal);
41 JTCSynchronized(const JTCMutex& m);
42 JTCSynchronized(const JTCRecursiveMutex& m);
43 ~JTCSynchronized();
44};
45
46//
47// Inlining the methods causes problems with CC 7.1 under SGI
48//
49#if !defined(__sgi)
50inline
51JTCSynchronized::JTCSynchronized(const JTCMonitor& mon)
52 : mon_(&mon), lockType_(LOCKED_MONITOR)
53{
54 mon_ -> lock(false);
55}
56
57inline
58JTCSynchronized::JTCSynchronized(const JTCMonitor& mon, bool internal)
59 : mon_(&mon), lockType_(LOCKED_MONITOR)
60{
61 mon_ -> lock(internal);
62}
63
64inline
65JTCSynchronized::JTCSynchronized(const JTCMutex& m)
66 : mut_(&m), lockType_(LOCKED_MUTEX)
67{
68 mut_ -> lock();
69}
70
71inline
72JTCSynchronized::JTCSynchronized(const JTCRecursiveMutex& m)
73 : nrmut_(&m), lockType_(LOCKED_RECURSIVE_MUTEX)
74{
75 nrmut_ -> lock();
76}
77
78inline
79JTCSynchronized::~JTCSynchronized()
80{
81 switch(lockType_)
82 {
83 case LOCKED_MONITOR:
84 mon_ -> unlock();
85 break;
86 case LOCKED_MUTEX:
87 mut_ -> unlock();
88 break;
89 case LOCKED_RECURSIVE_MUTEX:
90 nrmut_ -> unlock();
91 break;
92 }
93}
94#endif
95
96#endif
Note: See TracBrowser for help on using the repository browser.