脚本验证线程分析

nScriptCheckThreads该变量存储着脚本验证线程的数量,最小为0,最大是16


脚本验证线程分析_第1张图片
图片发自App


/** Run an instance of the script checking thread */ void ThreadScriptCheck(); static CCheckQueue scriptcheckqueue(128); void ThreadScriptCheck() {   RenameThread("bitcoin-scriptch");   scriptcheckqueue.Thread(); }


脚本验证线程分析_第2张图片
图片发自App


脚本验证线程分析_第3张图片
图片发自App


该函数的声明和定义都在上面了。 类CScriptCheck,表示一个脚本验证的关闭,这里存储着事务的输出


脚本验证线程分析_第4张图片
图片发自App



脚本验证线程分析_第5张图片
图片发自App


图片发自App


CCheckQueue类,排队进行脚本的验证。 根据函数上下文的调用关系,可以知道,验证脚本的队列的长度初始化为128,通过调用thread函数,thread函数在调用loop函数完成验证。由注释和源码可知,loop函数完成了脚本的验证工作,其中Master负责统计结果,Worker负责执行具体的脚本验证 cond.wait(lock);它会在一直在阻塞等待,直到有人调用add()函数加入到队列,才开始进行验证。

你可能感兴趣的:(脚本验证线程分析)