2013-12-20 107 views
4

當我意識到我錯過了一個重要的點:併發性時,我終於選擇了v8作爲我的應用程序的腳本引擎。此刻是V8線程安全的嗎?

我決定用v8代替lua,因爲有幾個關鍵因素,但顯然我無法用v8編寫線程安全代碼或一般多線程任務。

在官方文檔中,我發現沒有提到v8的併發功能,他們描述了GC,v8是用C++編寫的,它支持很多平臺等等,但是沒有關於對這兩個wiki進行線程化以及在C++應用程序中嵌入v8的官方文檔。

問題:我應該怎麼想v8?我必須從C++中將我的應用程序作爲一組單線程/線程安全函數公開嗎?

回答

6

V8不是線程安全的,但這並不意味着您不能在線程環境中使用它。唯一的規定是使用V8的​​3210對象,只要你訪問任何V8相關的東西。

這樣做其實很簡單,就是創建一個v8::Locker新實例,然後當你與任何動作你在做V8完成,創造的v8::Unlocker

一個實例在我與V8的文檔體驗.. 。它真是太吸引人了,看來(在我的使用中)學習如何使用它的最好方法是反覆試驗。

編輯:This答案在這裏介紹的多線程使用的V8比我做的事:

+0

既'Isolate'和'Locker'聲音就像從C/C++一個互斥體,但我沒有得到一樣東西,怎麼啓動多個線程?在鏈接的答案中,有一個鏈接表示v8只能在一個線程上運行,對於v8內的任何場景都是如此? – user2485710

+0

據我所知,是的,V8只能在一個線程上運行一次。 雖然爲了確定評論的第一部分,'Isolate'基本上是V8的一個乾淨實例。你創建一個新的'Isolate'來分隔不同腳本的執行。如果有什麼「Locker」比「Isolate」更類似於互斥體。 – rstat1