require Exporter;
our @ISA = qw(Exporter);
-our @EXPORT = qw(share cond_wait cond_broadcast cond_signal unlock);
+our @EXPORT = qw(share cond_wait cond_broadcast cond_signal _refcnt _id _thrcnt);
our $VERSION = '0.90';
-use XSLoader;
-XSLoader::load('threads::shared',$VERSION);
+use Attribute::Handlers;
-BEGIN {
- if ($Config{'useithreads'}) {
+
+if ($Config{'useithreads'}) {
*cond_wait = \&cond_wait_enabled;
*cond_signal = \&cond_signal_enabled;
*cond_broadcast = \&cond_broadcast_enabled;
- *unlock = \&unlock_enabled;
- } else {
+ require XSLoader;
+ XSLoader::load('threads::shared',$VERSION);
+}
+else {
*share = \&share_disabled;
*cond_wait = \&cond_wait_disabled;
*cond_signal = \&cond_signal_disabled;
*cond_broadcast = \&cond_broadcast_disabled;
- *unlock = \&unlock_disabled;
- }
}
sub cond_wait_disabled { return @_ };
sub cond_signal_disabled { return @_};
sub cond_broadcast_disabled { return @_};
-sub unlock_disabled { 1 };
-sub lock_disabled { 1 }
sub share_disabled { return @_}
$threads::shared::threads_shared = 1;
die "Splice not implemented for shared arrays";
}
+sub UNIVERSAL::shared : ATTR {
+ my ($package, $symbol, $referent, $attr, $data, $phase) = @_;
+ share($referent);
+}
__END__