2012-08-28 53 views
7

Tôi đang cố gắng sử dụng v8 từ C++ bên trong một chuỗi không phải là chuỗi chính. Không có luồng đa luồng nào có liên quan đến v8, tất cả các đối tượng v8 được tạo và hủy trong chuỗi đó. Không có gì đang chạy song song, không có gì đang được chia sẻ. Khi tôi chạy chương trình của tôi từ chủ đề chính, mọi thứ hoạt động tốt. Khi tôi có các công cụ v8 trong một chủ đề khác, tôi nhận được lỗi phân đoạn khi tôi tạo một v8 :: HandleScope.Làm cách nào để sử dụng v8 trong chuỗi?

Tôi không thể tìm thấy bất kỳ tài liệu hữu ích nào về cách luồng thực sự được giải quyết với v8. Hướng dẫn "sử dụng phân lập và tủ khóa" xuất hiện thường xuyên khi tìm kiếm, nhưng tôi không thể tìm thấy bất kỳ ví dụ nào về cách thực hiện điều này. Có tài liệu API này trên v8 :: Cô lập, nhưng không có gì trên trang đó cho tôi biết nếu tôi cần chúng trong trường hợp cụ thể của tôi (tôi không chia sẻ bộ nhớ hoặc thực hiện song song). Các tài liệu trên v8 :: Locker() thậm chí không có thông tin về những gì lớp học được cho. Các mẫu được bao gồm trong dự án cũng không giải quyết được bất kỳ vấn đề nào trong số này.

Vì vậy, câu hỏi của tôi là ...

  • Tôi có cần phải sử dụng phân lập và/hoặc tủ khóa ở đây?
  • Tôi có thể lấy ví dụ tối thiểu về cách sử dụng chúng không? Ngay cả mã giả hoặc một cái gì đó sẽ thực sự hữu ích

Trả lời

2

Bạn cần V8 :: Locker trong các phương pháp sẽ làm việc với ngữ cảnh khi gọi HandleScope. https://github.com/jasondelponte/go-v8/blob/master/src/v8context.cc#L41 là ví dụ về cách tôi đã sử dụng tủ khóa với v8. Trong ví dụ này, nó được sử dụng với nhiều luồng, nhưng tôi tin rằng quy tắc cũng áp dụng với các chuỗi đơn.

Cách ly chỉ cần thiết khi bạn muốn nhiều phiên bản v8 song song.

https://groups.google.com/forum/?fromgroups=#!topic/v8-users/FXpeTYuAqKI Là một chuỗi cũ tôi đã tìm thấy cách đây một chút đã giúp tôi giải quyết sự cố của mình với thư viện bị lỗi ngay khi biến cục bộ HandleScope được tạo.

Các vấn đề liên quan