Dave Mitchell wrote:
A question about threads from the XS-embedding-module perspective:
What is the difference between MY_CXT and PL_modglobal?

PL_modglobal is a general perl-interpreter hash.

So, if a interpreter creates new threads, every thread get its own copy of PL_modglobal?

I have implemented C running Perl module that embed a C XS function, and want to pass a pointer to that function from the C code that runs Perl.
The Perl side span multiple threads, and each call that C function.

The usual way of doing this is to store the pointer in an SV using using
the PTR2UV and INT2PTR macros. This may remove your need to use MY_CXT.

To hide the pointer inside a global (our) variable? And let the Perl name space be my storage. nice.

So, what is the difference between MY_CXT and PL_modglobal? not in the global scope that one have while the other is local, but from threads safety question.

I'd need more details on how how your are creating and using threads and
interpreters to be able to answer that.

There is a C program (STAF) that runs a multiple Perl interpreters, each spanning multiple threads, and each thread is calling a certain XS function. The C program needs to supply context to the XS function, so for every Perl that is creates it malloc a certain structure, and store the pointer inside PL_modglobal.

Shmuel.

Reply via email to