Comments (6)
被wait的对象可能在wait返回后立刻析构,从而使析构和wake竞争。具体分析看这里的注释, futex已经处理了这种情况,会返回EFAULT(地址失效)或触发spurious wakeup(地址仍有效),butex中通过永不释放的内存池来解决问题,可能会触发spurious wakeup.
from brpc.
190行的注释中的例子我理解了,在这里我不大理解的是 futex_wait_private能够返回是由于另一个线程futex_wake_private调用之后(而不是pw->sig.store(SAFE_TO_DESTROY, butil::memory_order_release)调用之后),也就是不会出现futex_wake_private检查地址出现EFAULT(地址失效)的问题,难道是因为futex_wake_private还没结束, futex_wait_private就可以返回了(导致对象被销毁),导致futex_wake_private在继续执行时发现地址失效了?
from brpc.
这个是futex的典型现象了,当sig.store完成后,wait那边正好进入,发现sig和expected不相等,直接返回EWOULDBLOCK一路下去了,并不需要wake。
from brpc.
多谢解答,懂了。再问一个问题,在写多线程程序时,要将条件判断放到while循环中,就像下面这样:
while(条件不满足) {
wait();
}
这是为了:
- 处理由于地址失效引起的spurious wakeup
- 多个等待线程被唤醒时,可能只有一个能够继续执行,其他的仍要wait等待
from brpc.
主要是1, futex以及signal(看EINTR的相关材料)可能引起spurious wakeup. 现代的操作系统都不会有惊群了.
from brpc.
@jamesge @chenzhangyi ,感谢二位的解答
from brpc.
Related Issues (20)
- support gdb_bthread_stack.py in coredump HOT 1
- bthread_setconcurrency相关的使用优化 HOT 2
- Complie errror
- brpc产物编译失败,链接的时候不对??
- server 端通过channel 访问其他服务,内存持续缓慢上涨,疑似内存泄漏
- keytable管理问题咨询 HOT 2
- 我在brpc实现了mongo的客户端, 对于无返回的请求, 该如何处理呢? 静静的等待超时? HOT 9
- 当启动参数过长,访问/vars会导致dashboard崩溃
- brpc初始化失败,cpu持续100% HOT 2
- Paddle 启动报Fail to fscanf的warning,非常多 HOT 1
- bthread_worker_usage这个统计值为何有时候会超时bthread HOT 2
- Why make two OS_POSIX judgments in loging.cc?
- BUG? Response执行完先于IssueRPC中的bthread_id_unlock执行完毕的话, unlock会失败吧? HOT 3
- 308 Unknown status code HOT 1
- 遇到一个编译问题 HOT 2
- brpcDummyServer成功启动但无法工作问题
- 容器部署绑定cpu后coredump HOT 1
- leveldb已经老旧化,是否考虑切到rocksdb HOT 4
- bvar::PassiveStatus<std::string> 无法暴露指标 HOT 3
- Is there already any plan about switch bazel workspace to bzlmod? HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from brpc.