1

我需要在 perl 模块的 *.XS 部分内的 C 函数中获取当前的 perl 线程 ID。

在纯 perl(* .pm 部分)中,我会简单地做:

$id = threads->tid();

但是在 XS 中获得这个值的推荐方法是什么?

不幸的是http://perldoc.perl.org/perlthrtut.htmlhttp://perldoc.perl.org/threads.html没有谈到在 XS 中处理线程。

提前致谢

--kmx

4

2 回答 2

2

要调用方法,可以使用call_method.

 UV get_tid() {
    dSP;
    UV tid;

    ENTER;
    SAVETMPS;

    PUSHMARK(SP);
    XPUSHs(sv_2mortal(newSVpv("threads", 0)));
    PUTBACK;

    count = call_method("tid", G_SCALAR|G_EVAL);

    SPAGAIN;
    if (SvTRUE(ERRSV) || count != 1)
        tid = 0;
    else
        tid = (UV)POPi;
    PUTBACK;

    FREETMPS;
    LEAVE;

    return tid;
 }
于 2012-01-27T19:52:03.210 回答
0

看看线程本身是如何做到的!我建议您threads从 CPAN 下载,解压缩并查看threads.xs. 您需要的部分是一个名为ithread_tid.

于 2012-01-27T19:37:36.687 回答