http://www.7klian.com

比特币源码阐明:多线程查抄剧本

// Don't cache results if we're actually connecting blocks (still

将初始化和资源释放都移动到一个包装类中的长处
void ThreadScriptCheck() {

bool Wait() 处理惩罚完行列中的所有任务后,该要领退出,,并返回这些任务的处理惩罚功效

}
};  
vChecks.reserve(nBatchSize);
std::swap(ptxTo, check.ptxTo);
}

ConnectBlock 将该区块链接到当前激活链上,并更新 UTXO 荟萃。 在该要领中:利用了全局工具 scriptcheckqueue 去结构了一个姑且的打点工具,并通过该打点工具来操纵全局任务行列,用来添加任务,以及执行任务。当该姑且的打点工具析构时,会挪用 wait() 要领,插手任务处理惩罚,处理惩罚完所有任务后,该工具析构完成。

}

bool fQuit; 是否需要退出

行列中利用了模板类,执行的验证任务由 T 标识,T 都必需提供一个重载的 operator() 要领,而且反回一个 bool。 默认为主线程 push 批量任务到行列中,其他的事情线程去处理惩罚这些任务,当主线程 push 完任务后,也去处理惩罚这些任务,直到任务行列全部处理惩罚完毕。 上述是行列的实现:主要的任务处理惩罚是在 Loop() 函数中 ; 该行列会举办两种挪用,来处理惩罚行列中的任务 :

}
// execute work; 执行本线程刚分到的事情。
...

void Add() 向 CCheckQueue 中添加任务,叫醒子线程去处理惩罚

if ((fMaster || fQuit) && nTodo == 0) {
}
// first do the clean-up of the previous loop run (allowing us
for (unsigned int i = 0; i < nNow; i++) {
Amount fee = view.GetValueIn(tx) - tx.GetValueOut();

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!

相关文章阅读