in reply to A faster?, safer, user transparent, shared variable "locking" mechanism.
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).
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: A faster?, safer, user transparent, shared variable "locking" mechanism.
by ikegami (Patriarch) on Oct 26, 2006 at 08:12 UTC | |
by Anonymous Monk on Oct 26, 2006 at 08:23 UTC | |
by ikegami (Patriarch) on Oct 26, 2006 at 08:44 UTC | |
by samtregar (Abbot) on Oct 26, 2006 at 22:02 UTC | |
by BrowserUk (Patriarch) on Oct 26, 2006 at 22:36 UTC | |
| |
|
Re^2: A faster?, safer, user transparent, shared variable "locking" mechanism.
by BrowserUk (Patriarch) on Oct 26, 2006 at 08:21 UTC |