Changeset 1686 in Sophya for trunk/ArchTOIPipe/Kernel/toisegment.h
- Timestamp:
- Oct 12, 2001, 1:17:10 AM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ArchTOIPipe/Kernel/toisegment.h
r1671 r1686 67 67 68 68 int refcount; // Nombre de vues qui utilisent 69 pthread_mutex_t refcount_mutex; 69 pthread_mutex_t refcount_mutex; // Pour modification refcount 70 70 71 71 double* data; 72 72 uint_8* flags; 73 74 friend class BufferView; 75 friend class MasterView; 73 76 }; 74 77 … … 80 83 81 84 void putData(int sn, double data, uint_8 flag); 85 double getData(int sn); 86 uint_8 getFlag(int sn); 87 88 protected: 82 89 void addToWaitList(BufferView* bv); 90 void removeFromWaitList(BufferView* bv); 83 91 84 92 BufferView* getView(); // thread-specific 85 93 86 protected:87 94 friend class BufferView; 88 95 void signalWaitingViews(); … … 94 101 95 102 int maxSegments; 96 int bufferSize;97 int sn0; // First sn in first buffer98 vector<BufferSegment*> segments; // Committed 103 int segmentSize; 104 int sn0; // First sn in first segment 105 vector<BufferSegment*> segments; // Committed segments 99 106 100 pthread_mutex_t mutex; // lock for master buffer list access 101 pthread_cond_t condv; // waiting (read or write) 107 pthread_mutex_t views_mutex; // lock for master buffer list access 108 pthread_mutex_t write_mutex; // for write waiting 109 pthread_cond_t condv; // waiting (read or write) (write only ?) 110 pthread_key_t buffer_key; // thread-specific buffer view 111 static void BufferDestroy(void *); 102 112 103 113 static const int NO_WAIT = 0; … … 107 117 108 118 set<BufferView*> waitingBuffers; 119 120 void checkDeadLock(); 109 121 }; 110 122 … … 113 125 class BufferView { 114 126 public: 115 BufferView( );127 BufferView(MasterView*); 116 128 ~BufferView(); 129 130 double getData(int sn); 131 uint_8 getFlag(int sn); 117 132 133 protected: 134 void wait(); // Passe en attente d'un nouveau segment -- lecture 118 135 void sync(); // recupere les nouveaux segments, resync avec master 119 void wait(); // Passe en attente d'un nouveau segment 120 protected: 136 void ensure(int sn); 137 void signal(); 138 121 139 friend class MasterView; 122 140 MasterView* master; 123 141 vector<BufferSegment*> segments; // Committed 142 int sn0; 143 int segmentSize; 124 144 pthread_mutex_t mutex; // lock pour attente de segments 125 pthread_cond_t condv; // attente de segments 145 pthread_cond_t condv; // attente de segments (en lecture) 126 146 }; 127 147 … … 130 150 }; 131 151 132 // Inline methods 152 /***********************************/ 153 /* Inline methods -- BufferSegment */ 154 /***********************************/ 133 155 134 156 double TOISegmented::BufferSegment::getData(int sn) {
Note:
See TracChangeset
for help on using the changeset viewer.