标题可能有点混乱。我想做的是我有一个共享值,它需要作为节点本机插件的一部分共享。插件本身是上下文感知的,这意味着它可以从许多工作线程加载。所以我的问题是如何使对共享值的写入和读取操作是线程安全的。在这里,我提供了一个最小的项目来证明这一点。
#include <node.h>
#include "nan.h"
// shared value
double value = 0;
NAN_METHOD(SetValue)
{
if (!info[0]->IsNumber())
{
return Nan::ThrowTypeError("Number expected");
}
value = info[0].As<v8::Number>()->Value();
}
NAN_METHOD(GetValue)
{
info.GetReturnValue().Set(Nan::New<v8::Number>(value));
}
NAN_MODULE_INIT(Init)
{
// set_v & get_v may be called from many worker threads
Nan::Set(target, Nan::New<v8::String>("set_v").ToLocalChecked(), Nan::New<v8::Function>(SetValue));
Nan::Set(target, Nan::New<v8::String>("get_v").ToLocalChecked(), Nan::New<v8::Function>(GetValue));
}
NODE_MODULE_INIT()
{
Init(exports);
}