How to share c++ data from multiple worker-thread loaded node addons

286 Views Asked by At

The title may be a little confusing. What I wanna do is that I have a shared value, which need to be shared as part of node native addon. The addon itself is context aware, which means it may be loaded from many worker threads. So my question is how should make the write & read operation to the shared value to be thread-safe. Here I provide a minimal project to demonstrate this.

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

There are 0 best solutions below