Lua テストスクリプトを介してテストされる c ライブラリを実行しています。これは問題なく動作しますが、マルチスレッド化の時期であると判断しました。そのため、Lua Lanes の実装を開始しましたが、スレッド用の C ライブラリのロードで行き詰まりました。
関数テストがあります。これは実際のテスト スイート関数です (他のすべての関数を実行します)。最初に、次のように呼び出して別のスレッドにプッシュしようとしました。
local pwlog = require "pwlog"
--A milion lines of code, one of which is the test function
testF = lanes.gen("*", {required = {"pwlog"}}, tests)()
明確local pwlog
にするために、関数ではなくグローバルに定義されています。
これはhttps://github.com/LuaLanes/lanes/issues/108に基づいていますが、彼が何を言っているのか正確に把握するのは難しいと感じました。さて、これは間違っていました:
lua: /usr/local/share/lua/5.1/lanes.lua:327: main: function 'pwlogs/block_size' not found in Lane #0x2390770 destination transfer database
よし、違うものを試してみた。テスト関数の先頭に 1 行追加しました。
local function tests ()
pwlog = require "pwlog"
print("test")
--etc
そして、呼び出しを変更しました:
testF = lanes.gen("*", tests)()
これはうまくいくと思いました。ここで pwlog は、スレッドが作成されるまで存在しないので、すべて問題ないと考えました。しかし、非常に不可解なエラーが返されました。
lua: /usr/local/share/lua/5.1/lanes.lua:327: can't copy non-deep full userdata across lanes
このエラーは、次の行でスローされます。
testF = lanes.gen("*", tests)()
だから今私は立ち往生しています。C 関数を lua レーン スレッドにロードするにはどうすればよいですか?
Lua5.1を使用しています