source: Sophya/trunk/ArchTOIPipe/Kernel/ringpipe.h@ 2385

Last change on this file since 2385 was 2385, checked in by aubourg, 22 years ago

rings

File size: 1.4 KB
RevLine 
[2385]1// This may look like C code, but it is really -*- C++ -*-
2
3// ArchTOIPipe (C) CEA/DAPNIA/SPP IN2P3/LAL
4// Eric Aubourg
5// Christophe Magneville
6// Reza Ansari
7// $Id: ringpipe.h,v 1.1 2003-05-19 23:31:29 aubourg Exp $
8
9#ifndef RINGPIPE_H
10#define RINGPIPE_H
11
12#include "config.h"
13
14#include <vector>
15
16#include <pthread.h>
17
18class RingProcessor;
19class Ring;
20
21class RingPipe {
22public:
23 RingPipe();
24 virtual ~RingPipe();
25
26 virtual Ring const* getRing(int i);
27 virtual void putRing(int i, Ring const* ring);
28
29 virtual void wontNeedRingBefore(int i);
30
31protected:
32 pthread_mutex_t mutex;
33 pthread_mutexattr_t mutattr;
34 pthread_cond_t ringReady;
35
36 RingProcessor* producer;
37 vector<RingProcessor*> consumers;
38
39 virtual void setProducer(RingProcessor* prod);
40 virtual void addConsumer(RingProcessor* prod);
41
42 friend class RingProcessor;
43
44 void lock() {pthread_mutex_lock(&mutex);}
45 void unlock() {pthread_mutex_unlock(&mutex);}
46 void wait() {pthread_cond_wait(&ringReady, &mutex);}
47 void notify() {pthread_cond_broadcast(&ringReady);}
48
49 vector<Ring const*> data;
50 int i0;
51
52 enum DataStatus {DATA_OK=0, DATA_DELETED, DATA_NOT_YET};
53
54 virtual void waitForRing(int i); // should be locked before
55 virtual DataStatus isRingAvail(int i); // should be locked before
56
57 virtual void getRingRange(int& min, int& max);
58};
59
60
61#endif
62
Note: See TracBrowser for help on using the repository browser.