Re: XS callbacks from different threads.
[email protected] (Josef Wolf) Fri, 8 Aug 2008 17:01:21 +0200
| Newsgroups | perl.ithreads |
|---|---|
| Message-ID | <[email protected]> |
On Thu, Aug 07, 2008 at 10:02:29PM +0300, Shmuel Fomberg wrote:
> >>>static SV *callback_ref = (SV*)NULL;
> >>Reality check: you do know that "static" means here, right?
> >I think so: I have exactly one instance of this variable. Do you see
> >any problems with this?
>
> Um, you are thinking C++.
No, I'm thinking pure C here. I don't line C++ very much. (please
feel free to check http://yosefk.com/c++fqa/ for some reasons why
I don't like C++)
> declaring static variable outside object or
> function says something about it's scope. (you still get one instance of
> this, even without the static)
Since we were talking about threads, I assumed that your question was
about having one instance (shared by all threads) against having one
instance per thread. I need to pass the callback reference from the
main thread to the callback thread, so having a shared variable for
this is exactly what I want.
The scope should surely be limited to my file, because I don't want to
export objects without a reason. I still don't see any problem with
this.
> >>>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?
> >AFAIK, this is created by dTHX.
>
> Correct. but from where does the dTHX take it? from the connection
> between the thread and one perl interpreter. who makes the connection?
> PERL_SET_CONTEXT. but the PERL_SET_CONTEXT is inited with my_perl... see
> the loop here?
I agree that the dTHXa() method you mentioned is the cleaner method.
BTW: I can't find any reference of this macro in the documentation. Are
you sure this is officially part of the API?