如何将参数传递给由 clone() 调用的函数?

pDO*_*ame 4 c parameters clone

我必须在主函数中使用 clone() 系统调用来获取 2 个线程。(我知道,还有其他选择,但在这种情况下,它必须是 clone())。

系统调用起作用并且两个线程都到达指定的函数(foo)。但是在这个函数中,我需要他们用这个签名调用另一个函数:

void increment(int* a, int b)
Run Code Online (Sandbox Code Playgroud)

(旁注:它将 b * 1 添加到 a。(= a+b))

重要的是,a 和 b 都在主函数中声明,我不知道如何将它们传递给 foo。

我已经尝试过不同的东西,但没有成功。我得到了一个提示:使用适配器。但我不知道如何做到这一点。(我也不知道如何在带有 int 的克隆中使用 args。)

有什么建议?

Kar*_*ldt 5

的参数之一clone()是 a void* arg。这使您可以将空指针传递给您的函数。为了传递一个 int 指针和一个 int,您必须创建一个结构,其中一个 int 指针和 int分别分配给ab,然后将指向该结构的指针转换为空指针。然后在函数内部反转该过程。

我的 C 有点生疏,我还没有编译这个,所以不要引用我的话,但它应该看起来大致如下:

struct clone_args {
    int* a;
    int b
};

int main(int argc, char* argv[])
{
    struct clone_args args;
    args.a = a;
    args.b = b;
    void* arg = (void*)&args;
    clone(fn, ..., arg, ...);
}

int fn(void* arg)
{
    struct clone_args *args = (struct clone_args*)arg;
    int* a = args->a;
    int b = args->b;
}
Run Code Online (Sandbox Code Playgroud)

注意:请注意,您创建的结构在fn被调用时仍在范围内,因为它没有被复制。你可能不得不这样malloc做。