0

标题可能有点混乱。我想做的是我有一个共享值,它需要作为节点本机插件的一部分共享。插件本身是上下文感知的,这意味着它可以从许多工作线程加载。所以我的问题是如何使对共享值的写入和读取操作是线程安全的。在这里,我提供了一个最小的项目来证明这一点。

#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);
}
4

0 回答 0