在Node.js插件中使用std::thread
Using std::thread in Node.js Addon
想象一下,我使用Node.js插件中的同步函数:
var check_ok = addon.my_function(parameters);
var final_results = addon.final_function(parameters);
但在方法代码中我有:
std::thread t[10]; //Global
//...
void my_function(const FunctionCallbackInfo<v8::Value>& args) {
//....
t[0] = thread(random_void_function, [parameters])
t[1] = thread(random_void_function_2, [parameters])
//...
}
//...
void final_results(const FunctionCallbackInfo<v8::Value>& args) {
//...
t[0].join();
t[1].join();
//...Give results.. etc
}
所以我有两个插件的同步调用,但在这个插件中使用了两个线程。一个函数将启动线程,另一个将连接线程。问题是:random_void_function
和random_void_function_2
将并行运行?由于my_function
和final_function
是同步的,那么random_void_function
和random_void_function_2
会阻塞事件循环吗?据我所见,他们没有阻拦。
问题是:random_void_function和random_void_function_2将并行运行?
是的,只要他们活得够久。如果它们是短暂的,那么一个同样合理的结果是,第一次出发和离开先于第二次出发和退出(反之亦然)。
由于my_function和final_function是同步的,那么random_void_function和random_void_function_2会阻塞事件循环吗?据我所见,他们没有阻拦。
不,也许吧。addon.my_function
将而不是阻止事件循环。addon.final_results
(我想您想在上面调用它而不是addon.final_function
)只会在random_void_function
是长寿命的情况下阻塞。如果它们的寿命很短并且已经退出,addon.final_results
将立即退出。
由于您没有看到任何阻塞,我怀疑random_void_function
是短暂的。
相关文章:
- 在std::thread中,joinable()然后join()线程安全吗
- 分离一个静态常量 std::thread?
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 如何从 std::thread 返回值
- 将 std::thread by 值推送到列表中
- 转发变量参数列表以模拟 std::thread
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- std::thread 增加 DLL 引用计数,从而防止卸载 DLL
- 如何防止 std::thread 在 QT 中冻结 GUI?
- 对带有唯一指针的 std::thread 使用类成员函数时出现编译错误
- 为什么参数在构造 std::thread 时移动两次
- std::thread::_Invoker 使用线程编程时出错
- 在线程 A 中创建一个 std::thread 对象,在线程 B 中连接
- 为什么编译器抱怨 std::thread 参数在转换为右值后必须是可调用的?
- ZeroMQ 在使用 std::thread 创建工作线程时崩溃
- 在没有复制构造函数的对象的成员函数中启动 std::thread
- CLang:在 std::thread 中运行函数会导致结构创建BAD_ACCESS
- 调用以CWinThread为基的类运算符()的std::thread失败
- 如何通过std::thread生成多个线程
- std::future::get()或std::future::wait()是std::thread::join()的替