fix schedule sort order
This commit is contained in:
parent
0d5afe86d9
commit
dc91979409
5 changed files with 9 additions and 3 deletions
|
|
@ -13,6 +13,8 @@ namespace fc {
|
||||||
bool operator < ( const priority& p )const {
|
bool operator < ( const priority& p )const {
|
||||||
return value < p.value;
|
return value < p.value;
|
||||||
}
|
}
|
||||||
|
static priority max() { return priority(10000); }
|
||||||
|
static priority min() { return priority(-10000); }
|
||||||
int value;
|
int value;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ namespace fc {
|
||||||
friend microseconds operator + (const microseconds& l, const microseconds& r ) { return microseconds(l._count+r._count); }
|
friend microseconds operator + (const microseconds& l, const microseconds& r ) { return microseconds(l._count+r._count); }
|
||||||
|
|
||||||
bool operator==(const microseconds& c)const { return _count == c._count; }
|
bool operator==(const microseconds& c)const { return _count == c._count; }
|
||||||
|
friend bool operator>(const microseconds& a, const microseconds& b){ return a._count > b._count; }
|
||||||
microseconds& operator+=(const microseconds& c) { _count += c._count; return *this; }
|
microseconds& operator+=(const microseconds& c) { _count += c._count; return *this; }
|
||||||
int64_t count()const { return _count; }
|
int64_t count()const { return _count; }
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,7 @@ namespace fc {
|
||||||
//promise_base* prom;
|
//promise_base* prom;
|
||||||
std::vector<blocked_promise> blocking_prom;
|
std::vector<blocked_promise> blocking_prom;
|
||||||
time_point resume_time;
|
time_point resume_time;
|
||||||
|
// time_point ready_time; // time that this context was put on ready queue
|
||||||
fc::context* next_blocked;
|
fc::context* next_blocked;
|
||||||
fc::context* next;
|
fc::context* next;
|
||||||
fc::thread* ctx_thread;
|
fc::thread* ctx_thread;
|
||||||
|
|
|
||||||
|
|
@ -294,7 +294,7 @@ namespace fc {
|
||||||
void thread::notify( const promise_base::ptr& p ) {
|
void thread::notify( const promise_base::ptr& p ) {
|
||||||
BOOST_ASSERT(p->ready());
|
BOOST_ASSERT(p->ready());
|
||||||
if( !is_current() ) {
|
if( !is_current() ) {
|
||||||
this->async( [=](){ notify(p); } );
|
this->async( [=](){ notify(p); }, "notify", priority::max() );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// TODO: store a list of blocked contexts with the promise
|
// TODO: store a list of blocked contexts with the promise
|
||||||
|
|
|
||||||
|
|
@ -134,12 +134,14 @@ namespace fc {
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
void ready_push_front( const fc::context::ptr& c ) {
|
void ready_push_front( const fc::context::ptr& c ) {
|
||||||
|
// c->ready_time = time_point::now();
|
||||||
c->next = ready_head;
|
c->next = ready_head;
|
||||||
ready_head = c;
|
ready_head = c;
|
||||||
if( !ready_tail )
|
if( !ready_tail )
|
||||||
ready_tail = c;
|
ready_tail = c;
|
||||||
}
|
}
|
||||||
void ready_push_back( const fc::context::ptr& c ) {
|
void ready_push_back( const fc::context::ptr& c ) {
|
||||||
|
// c->ready_time = time_point::now();
|
||||||
c->next = 0;
|
c->next = 0;
|
||||||
if( ready_tail ) {
|
if( ready_tail ) {
|
||||||
ready_tail->next = c;
|
ready_tail->next = c;
|
||||||
|
|
@ -155,7 +157,7 @@ namespace fc {
|
||||||
};
|
};
|
||||||
struct task_when_less {
|
struct task_when_less {
|
||||||
bool operator()( task_base* a, task_base* b ) {
|
bool operator()( task_base* a, task_base* b ) {
|
||||||
return a->_when < b->_when;
|
return a->_when > b->_when;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -358,7 +360,7 @@ namespace fc {
|
||||||
if( c->blocking_prom.size() ) {
|
if( c->blocking_prom.size() ) {
|
||||||
c->timeout_blocking_promises();
|
c->timeout_blocking_promises();
|
||||||
}
|
}
|
||||||
else { ready_push_back( c ); }
|
else { ready_push_front( c ); }
|
||||||
}
|
}
|
||||||
return time_point::min();
|
return time_point::min();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue