00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef STXXL_IO_REQUEST_QUEUE_IMPL_QWQR_HEADER
00016 #define STXXL_IO_REQUEST_QUEUE_IMPL_QWQR_HEADER
00017
00018 #include <list>
00019
00020 #include <stxxl/bits/io/request_queue_impl_worker.h>
00021 #include <stxxl/bits/common/mutex.h>
00022
00023
00024 __STXXL_BEGIN_NAMESPACE
00025
00028
00029 class request_queue_impl_qwqr : public request_queue_impl_worker
00030 {
00031 private:
00032 typedef request_queue_impl_qwqr self;
00033 typedef std::list<request_ptr> queue_type;
00034
00035 mutex write_mutex;
00036 mutex read_mutex;
00037 queue_type write_queue;
00038 queue_type read_queue;
00039
00040 state<thread_state> _thread_state;
00041 thread_type thread;
00042 semaphore sem;
00043
00044 static const priority_op _priority_op = WRITE;
00045
00046 static void * worker(void * arg);
00047
00048 public:
00049
00050 request_queue_impl_qwqr(int n = 1);
00051
00052
00053
00054
00055
00056 void set_priority_op(priority_op op)
00057 {
00058
00059 STXXL_UNUSED(op);
00060 }
00061 void add_request(request_ptr & req);
00062 bool cancel_request(request_ptr & req);
00063 ~request_queue_impl_qwqr();
00064 };
00065
00067
00068 __STXXL_END_NAMESPACE
00069
00070 #endif // !STXXL_IO_REQUEST_QUEUE_IMPL_QWQR_HEADER
00071