2015-01-05 2 views
3

나는 추측하고있다 (또는, 가능하다면 거의 확실하게 내 시간의 가치가 없을 것이다).공유 메모리에 lua_State를 저장할 수 있습니까?

내가 생각하고있는 방식은 offset_ptr의 자식 객체가 상태에 대한 관련 포인터의 위치를 ​​얻는 데 사용할 수있는 lua_State을 소유하고있는 미러 객체를 생성하는 것입니다. 실현 가능하지 않다 ... lua_ 메소드가 아마 접근 할 수있는 다른 객체가있다. 정확한 주소를 어떻게 전달할 지 모르겠다. ...

추측 나는이 ​​경우에 대해서도 확실한 할당자를 필요로 할 것이다. 지원됩니까?

+3

여기 정확히 목표는 무엇입니까? 나는 따라 가지 않았다. –

+0

나는 처리해야 할 많은 객체 (즉, 업데이트 메소드 호출)와 그 사이에 그렇게하는 작업을 공유하는 작업자 프로세스가 있습니다. 이러한 객체 중 일부는 Lua 스크립트를 호출하여 상태를 저장해야 할 수도 있습니다. 현재 모든 객체를 공유 메모리의 큰 블록에 저장하고 있지만'lua_State' 객체를 포함하는 것은 첫 번째 비 포드 (non-pod) 데이터 구조입니다. (그리고 처음에는 자신을 만들지 않았습니다) w/r/t 공유 메모리 및 그것은 원시 포인터 제한입니다. –

+1

다중 근로자가 동시에 동일한 'lua_State'를 강타 할 수는 없습니까? 뮤텍스와 세마포어 등을 사용하여 액세스를 동기화하지 않는 한 문제가 발생할 가능성이 높습니다. – greatwolf

답변

2

루아는 순수하게 표준 C로 구현 되었기 때문에 lua_State을 공유 메모리에 할당하는 것은 명백하게 기본적으로 지원되지 않습니다. 이 기능을 수동으로 구현하기 위해 소스를 수정하는 방법을 살펴볼 수도 있지만 문제가되지는 않을 것입니다. 대신 lua_State을 공유 메모리에서 지우고 필요한 경우 중요한 데이터를 공유 메모리에 복사하십시오.

+1

공유 메모리에 공간을 할당하는 데 필요한 것이 무엇인지 모르겠지만 Lua 상태를 만들 때 Lua에게 사용할 메모리 할당자를 말하면됩니다. 아마도 이것으로 충분합니다. – lhf

+0

@lhf, 공유 메모리는 각 프로세스마다 다른 주소이므로 원시 포인터를 지원하지 않습니다. Boost에는이 문제를 해결하기위한 offset_ptr이 포함되어 있습니다.이 문제는 기본적으로 offset_ptr과 얼마나 멀리 떨어져 있는지, 프로세스간에 이식 가능합니다. 불행히도 루아가 C로 사용하면 포인터 사용량이 무거워 ... –

관련 문제