The problem is, that many apparently read accesses in Perl, actually do modify the SV. Some innocent looking operations (in all example, ro is apparently read-only):
The fact that there are hidden data modifications is the reason that in Perl variables are by default not shared between threads.print $ro + 3; # Might upgrade a PV to a PVIV; $ref = \$ro; # Increments the refcount on $ro. $ro =~ /./; # Sets the pos associated with $ro. $var = $ro{foo}{bar}; # May autovivify $ro{foo}
Note also that the SV* just contain some metadata of the values - the real data is some hops away. Even something as simple as a string, with no magic attached will have its data scattered in three places (the SV* itself, containing the refcount, some flags, and a pointer to a structure (svpv) that contains, among other pieces of data, the length of the string, and a pointer to the actual string itself).
In reply to Re: A faster?, safer, user transparent, shared variable "locking" mechanism.
by Anonymous Monk
in thread A faster?, safer, user transparent, shared variable "locking" mechanism.
by BrowserUk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |