LMPX.COM |
Home | Linux | Mysql | PHP | XML | ||
|
|
|||
From: Shmuel Fomberg Date: Tue Aug 5 14:03:58 2008 Subject: Re: XS callbacks from different threads.
Josef Wolf wrote: >> For this one you need a real expert. It is possible to call into Perl >> from an XS sub. but to call into Perl from other threads while it is >> inside a XS call? I have no idea. > > As far as I understand the corresponding section in perlguts, it should > be possible _if_ PERL_SET_CONTEXT() is called before. But for some > reason it keeps crashing :-( Well, maybe, but there is already one thread that is passing through perl, so calling PERL_SET_CONTEXT for this perl on other thread is pulling the rug under the first thread's legs. it can't be good. >>> 2. I need to create a second perl interpreter (or clone the first one). >>> Can somebody point me to example code how to do that? >> That's actually no big deal. look at perldoc page perlembed, there are >> examples. > What I am missing from those examples is the explanation how the > different interpreters would communicate. There are two ways to communicate between two thread: using Perl's mechanizem, or using C. either possible. just stick to one and don't mix. For example, if you choose to use C communication, then after initizing the lib, the master perl should call some C function that waits until the lib finished working / need restart / etc. The lib will use the same system to release the master from it's sleep, either directly or even an XS sub that the perl code will call. (C calling Perl calling C...) > And there's one more complication: the low-level library don't even > state how many threads will call my callback. Therefore I would > prefer to have only _one_ interpreter and use a mutex to keep the > threads from entering the interpreter simultaneously. Maybe you should use two threads: one of the calling perl, and one slave perl. because as said two paragraphs ago, I don't think that using one perl interpreter will work. > static SV *callback_ref = (SV*)NULL; Reality check: you do know that "static" means here, right? > int call_perl (int cnt, ...) > { > dTHX; > PERL_SET_CONTEXT(my_perl); I hate the "my_perl" parameter. Who defined it? what is it set to? Especially if you have more then one perl interpreter in you code. I used: dTHXa(ph->perl); PERL_SET_CONTEXT(ph->perl); where ph was some struct that held the perl interpreter for me... Good luck, anyway. Shmuel.
| Navigate in group perl.ithreads at sever nntp.perl.org | |
| Previous | Next |
| © No Copyright You are free to use Anything |
Site Maintained by PHP Developer
Powered By PHP Consultants |