From 515f097614eaa79c1f9c40647e200dc7dc7dd619 Mon Sep 17 00:00:00 2001 From: Artur Bergman Date: Sun, 28 Oct 2001 21:02:33 +0000 Subject: [PATCH] Update documentation. p4raw-id: //depot/perl@12749 --- ext/threads/shared/shared.pm | 97 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 89 insertions(+), 8 deletions(-) diff --git a/ext/threads/shared/shared.pm b/ext/threads/shared/shared.pm index b212a41..5607186 100644 --- a/ext/threads/shared/shared.pm +++ b/ext/threads/shared/shared.pm @@ -27,7 +27,7 @@ require DynaLoader; our @ISA = qw(Exporter DynaLoader); our @EXPORT = qw(share cond_wait cond_broadcast cond_signal unlock); -our $VERSION = '0.01'; +our $VERSION = '0.90'; our %shared; @@ -119,11 +119,11 @@ threads::shared - Perl extension for sharing data structures between threads my $bar = share([]); $hash{bar} = share({}); - lock(\%hash); - unlock(\%hash); + lock(%hash); + unlock(%hash); cond_wait($scalar); - cond_broadcast(\@array); - cond_signal($scalar); + cond_broadcast(@array); + cond_signal(%hash); =head1 DESCRIPTION @@ -131,13 +131,87 @@ This modules allows you to share() variables. These variables will then be shared across different threads (and pseudoforks on win32). They are used together with the threads module. -=head2 EXPORT +=head1 EXPORT -share(), lock(), unlock(), cond_wait, cond_signal, cond_broadcast +C, C, C, C, C, C + +=head1 FUNCTIONS + +=over 4 + +=item share VARIABLE + +C takes a value and marks it as shared, you can share an scalar, array, hash +scalar ref, array ref and hash ref, C will return the shared value. + +C will traverse up references exactly I level. +C is equivalent to C, while C is not. + +=item lock VARIABLE + +C places a lock on a variable until the lock goes out of scope. If +the variable is locked by another thread, the C call will block until +it's available. C is recursive, so multiple calls to C are +safe--the variable will remain locked until the outermost lock on the +variable goes out of scope or C is called enough times to match +the number of calls to . + +If a container object, such as a hash or array, is locked, all the elements +of that container are not locked. For example, if a thread does a C, any other thread doing a C won't block. + +C will traverse up references exactly I level. +C is equivalent to C, while C is not. + + +=item unlock VARIABLE + +C takes a locked shared value and decrements the lock count. +If the lock count is zero the variable is unlocked. It is not necessary +to call C but it can be usefull to reduce lock contention. + +C will traverse up references exactly I level. +C is equivalent to C, while C is not. + +=item cond_wait VARIABLE + +The C function takes a B variable as a parameter, +unlocks the variable, and blocks until another thread does a C +or C for that same locked variable. The variable that +C blocked on is relocked after the C is satisfied. +If there are multiple threads Cing on the same variable, all but +one will reblock waiting to reaquire the lock on the variable. (So if +you're only using C for synchronization, give up the lock as +soon as possible) + +It is important to note that the variable can be notified even if no +thread C or C on the variable. It is therefore +important to check the value of the variable and go back to waiting if the +requirment is not fullfilled. + +=item cond_signal VARIABLE + +The C function takes a B variable as a parameter and +unblocks one thread that's Cing on that variable. If more than +one thread is blocked in a C on that variable, only one (and +which one is indeterminate) will be unblocked. + +If there are no threads blocked in a C on the variable, the +signal is discarded. + +=item cond_broadcast VARIABLE + +The C function works similarly to C. +C, though, will unblock B the threads that are blocked +in a C on the locked variable, rather than only one. =head1 BUGS -Not stress tested! +C is not supported on shared references, in the current version +C will only bless the thread local reference and the blessing +will not propagate to the other threads, this is expected to be implmented +in the future. + Does not support splice on arrays! =head1 AUTHOR @@ -146,8 +220,15 @@ Arthur Bergman Earthur at contiller.seE threads::shared is released under the same license as Perl +Documentation borrowed from Thread.pm + =head1 SEE ALSO L L =cut + + + + + -- 2.7.4