tcy

Results 1 comments of tcy

2.对于协程调度中,在添加事件监听后,YieldHold协程之前,如果由于事件触发,导致该协程被加入调度,并被其他线程调度了,此时同一协程被两个线程同时调度而发生异常。 此bug我也发现了。我的方案是在schedule::scheduleNoLock()模板函数中加个if检测是否是本协程schedule自己,即【if ( task.fiber == Fiber::GetThis())】。如果是则强制设置task的thread_id也为当前thread,即【task.threadId =GetThreadId()】。这样就避免了同一时刻有两个不同的线程竞争一个协程。 增加的代码为: ` if (task.fiber) { if (task.fiber == Fiber::GetThis() && thread == -1) { task.threadId = ::sylar::GetThreadId(); } }`