2014-01-23 33 views
2

爲什麼這個代碼帶給段錯誤?:V8代碼帶來的段錯誤

int jack_process(jack_nframes_t nframes, void *arg) 
{ 
    Local<Value> test = Local<Value>::New(Number::New(2)); 
    return 0; 
} 

jack_process在另一併行線程運行。我該如何做到這一點?我如何在另一個pthread中運行V8代碼?

請注意,這段代碼沒有任何segfaults。

int jack_process(jack_nframes_t nframes, void *arg) 
{ 
    Local<Value> test; 
    return 0; 
} 

謝謝。

+0

您使用的是哪個版本的v8?在最新版本中沒有新的方法,只需要處理,你應該通過一個指針來隔離:這是一個定義:'本地本地 ::新(隔離*隔離,處理那個);' –

+0

'$ node --version' 'v0.10.24' – Applejohn

+0

反正在主線程中工作正常。 – Applejohn

回答

1

JavaScript和Node是單線程的。通過在另一個線程中運行該代碼,本質上是試圖同時運行兩個JS線程。

V8允許你在線程上運行兩個JS實例,但它們需要是完全獨立的Isolate實例。

一般C++寫在另一個線程代碼,只需要使用標準的C++類和變量,然後通過uv_async_send使用libuv's threading support,然後在主線程異步處理器將這些值轉換成JS處理V8對象。