use threads::shared;
my $var : shared;
+ $var = $scalar_value;
+ $var = $shared_ref_value;
+ $var = &share($simple_unshared_ref_value);
+ $var = &share(new Foo);
my($scalar, @array, %hash);
share($scalar);
C<share> will traverse up references exactly I<one> level.
C<share(\$a)> is equivalent to C<share($a)>, while C<share(\\$a)> is not.
+This means that you must create nested shared data structures by first
+creating individual shared leaf notes, then adding them to a shared hash
+or array.
A variable can also be marked as shared at compile time by using the
C<shared> attribute: C<my $var : shared>.
need to use C<&share([])> and C<&share({})> syntax due to problems
with Perl's prototyping.
+The only values that can be assigned to a shared scalar are other scalar
+values, or shared refs, eg
+
+ my $var : shared;
+ $var = 1; # ok
+ $var = &share([]); # ok
+ $var = []; # error
+ $var = A->new; # error
+ $var = &share(A->new); # ok as long as the A object is not nested
+
+Note that it is often not wise to share an object unless the class itself
+has been written to support sharing; for example, an object's destructor
+may get called multiple times, one for each thread's scope exit.
+
=item lock VARIABLE
C<lock> places a lock on a variable until the lock goes out of scope.