Ignore:
Timestamp:
Oct 12, 2001, 1:17:10 AM (24 years ago)
Author:
aubourg
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ArchTOIPipe/Kernel/toisegment.h

    r1671 r1686  
    6767
    6868    int refcount;    // Nombre de vues qui utilisent
    69     pthread_mutex_t refcount_mutex;
     69    pthread_mutex_t refcount_mutex; // Pour modification refcount
    7070
    7171    double* data;
    7272    uint_8* flags;
     73
     74    friend class BufferView;
     75    friend class MasterView;
    7376  };
    7477 
     
    8083
    8184    void putData(int sn, double data, uint_8 flag);
     85    double getData(int sn);
     86    uint_8 getFlag(int sn);
     87
     88  protected:
    8289    void addToWaitList(BufferView* bv);
     90    void removeFromWaitList(BufferView* bv);
    8391
    8492    BufferView* getView(); // thread-specific
    8593
    86   protected:
    8794    friend class BufferView;
    8895    void signalWaitingViews();
     
    94101
    95102    int maxSegments;
    96     int bufferSize;
    97     int sn0;                // First sn in first buffer
    98     vector<BufferSegment*> segments; // Committed
     103    int segmentSize;
     104    int sn0;                         // First sn in first segment
     105    vector<BufferSegment*> segments; // Committed segments
    99106   
    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 *);
    102112
    103113    static const int NO_WAIT   = 0;
     
    107117
    108118    set<BufferView*>  waitingBuffers;
     119
     120    void checkDeadLock();
    109121  };
    110122
     
    113125  class BufferView {
    114126  public:
    115     BufferView();
     127    BufferView(MasterView*);
    116128    ~BufferView();
     129
     130    double getData(int sn);
     131    uint_8 getFlag(int sn);   
    117132   
     133  protected:
     134    void wait();  // Passe en attente d'un nouveau segment -- lecture
    118135    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
    121139    friend class MasterView;
    122140    MasterView* master;
    123141    vector<BufferSegment*> segments; // Committed
     142    int sn0;
     143    int segmentSize;
    124144    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)
    126146  }; 
    127147
     
    130150};
    131151
    132 // Inline methods
     152/***********************************/
     153/* Inline methods -- BufferSegment */
     154/***********************************/
    133155
    134156double TOISegmented::BufferSegment::getData(int sn) {
Note: See TracChangeset for help on using the changeset viewer.