-
Notifications
You must be signed in to change notification settings - Fork 981
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
可能的bug #24
Comments
2.对于协程调度中,在添加事件监听后,YieldHold协程之前,如果由于事件触发,导致该协程被加入调度,并被其他线程调度了,此时同一协程被两个线程同时调度而发生异常。 此bug我也发现了。我的方案是在schedule::scheduleNoLock()模板函数中加个if检测是否是本协程schedule自己,即【if ( task.fiber == Fiber::GetThis())】。如果是则强制设置task的thread_id也为当前thread,即【task.threadId =GetThreadId()】。这样就避免了同一时刻有两个不同的线程竞争一个协程。 增加的代码为: |
1.我没有碰到过,描述的不够详细 |
|
协程模块本来就不够独立,状态都是由调度器改变的,如果想让协程模块单独使用,还是建议修改协程的实现 |
问题1 超时回调中 对io的操作是线程安全的 不存在丢|漏事件 |
在Timer中使用shared_ptr作为set的键,可能存在每次超时函数中将所有未超时的定时器都取出并调度。 |
发现两个可能的bug,都是与多线程安全有关
The text was updated successfully, but these errors were encountered: