3

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を使用しています

4

0 に答える 0