异步程序就是容易出错。而且很多年轻程序员的智商也驾驭不了。
如果有轻量级线程就容易多了,可以尽可能地写成同步程序。
比如要读一个超大文件,分成N块多线程进行大量运算处理,处理结果再按顺序合成一处,可以这么写:
vector<Data> all_data(N);
for (Data& data : all_data) {
data.LoadRaw(GetNextFileSegment());
data.StartCalculationThread(); // 最好有轻量级线程支持
}
for (Data& data : all_data) {
AppendProcessedData(data.WaitAndGetResult());
}
这样就算小学生也能读懂这里的顺序是保证好了的。
至于Data类怎么实现,根据这段代码也是可以很容易推理出来的。
【 在 Bernstein (Berns) 的大作中提到: 】
: 标 题: Re: notify_one是如何保证了线程之间顺序不乱的?
: 发信站: 水木社区 (Mon Jun 1 23:19:35 2020), 站内
:
: 保证不了
: 能保证顺序的一种朴素方法:设置若干互斥量,每个线程在分配给它本身的特定互斥量上等待,按预定顺序唤醒互斥量即可
:
: 【 在 trabalhar 的大作中提到: 】
: : 比如三个线程时Abcabc不乱
:
: --
: 蜗牛角里争何事
: 石火光中寄此身
:
:
: ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 221.218.209.*]
--
FROM 76.126.252.*