ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro.pm
(Generate patch)

Comparing Coro/Coro.pm (file contents):
Revision 1.19 by root, Sat Jul 21 03:44:06 2001 UTC vs.
Revision 1.21 by root, Sun Jul 22 03:24:10 2001 UTC

23This module collection manages coroutines. Coroutines are similar to 23This module collection manages coroutines. Coroutines are similar to
24Threads but don't run in parallel. 24Threads but don't run in parallel.
25 25
26This module is still experimental, see the BUGS section below. 26This module is still experimental, see the BUGS section below.
27 27
28In this module, coroutines are defined as "callchain + lexical variables
29+ @_ + $_ + $@ + $^W), that is, a coroutine has it's own callchain, it's
30own set of lexicals and it's own set of perl's most important global
31variables.
32
33WARNING: When using this module, make sure that, at program end, no
34coroutines are still running OR just call exit before falling off the
35end. The reason for this is that some coroutine of yours might have called
36into a C function, and falling off the end of main:: results in returning
37to that C function instead if to the main C interpreter.
38
28=cut 39=cut
29 40
30package Coro; 41package Coro;
31 42
32use Coro::State; 43use Coro::State;
33 44
34use base Exporter; 45use base Exporter;
35 46
36$VERSION = 0.09; 47$VERSION = 0.10;
37 48
38@EXPORT = qw(async yield schedule terminate current); 49@EXPORT = qw(async yield schedule terminate current);
39@EXPORT_OK = qw($current); 50@EXPORT_OK = qw($current);
40 51
41{ 52{
42 use subs 'async';
43
44 my @async; 53 my @async;
45 54
46 # this way of handling attributes simply is NOT scalable ;() 55 # this way of handling attributes simply is NOT scalable ;()
47 sub import { 56 sub import {
48 Coro->export_to_level(1, @_); 57 Coro->export_to_level(1, @_);
60 return $old ? $old->($package, $ref, @attrs) : @attrs; 69 return $old ? $old->($package, $ref, @attrs) : @attrs;
61 }; 70 };
62 } 71 }
63 72
64 sub INIT { 73 sub INIT {
65 async pop @async while @async; 74 &async(pop @async) while @async;
66 } 75 }
67} 76}
68 77
69=item $main 78=item $main
70 79
171 180
172=cut 181=cut
173 182
174sub terminate { 183sub terminate {
175 $current->{_results} = [@_]; 184 $current->{_results} = [@_];
185 delete $current->{_coro_state};
176 &schedule; 186 &schedule;
177} 187}
178 188
179=back 189=back
180 190
234 - if variables or arguments "disappear" (become undef) or become 244 - if variables or arguments "disappear" (become undef) or become
235 corrupted please contact the author so he cen iron out the 245 corrupted please contact the author so he cen iron out the
236 remaining bugs. 246 remaining bugs.
237 - this module is not thread-safe. You must only ever use this module from 247 - this module is not thread-safe. You must only ever use this module from
238 the same thread (this requirement might be loosened in the future to 248 the same thread (this requirement might be loosened in the future to
239 allow per-thread schedulers, but Coro::Satte does not yet allow this). 249 allow per-thread schedulers, but Coro::State does not yet allow this).
240 250
241=head1 SEE ALSO 251=head1 SEE ALSO
242 252
243L<Coro::Channel>, L<Coro::Cont>, L<Coro::Specific>, L<Coro::Semaphore>, 253L<Coro::Channel>, L<Coro::Cont>, L<Coro::Specific>, L<Coro::Semaphore>,
244L<Coro::Signal>, L<Coro::State>, L<Coro::Event>. 254L<Coro::Signal>, L<Coro::State>, L<Coro::Event>.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines