This and other RFCs are available on the web at http://dev.perl.org/rfc/ =head1 TITLE MT-Safe Autovariables in perl 5.005 Threading =head1 VERSION Maintainer: Michael Maraist <[EMAIL PROTECTED]> Date: 25 Sep 2000 Mailing List: [EMAIL PROTECTED] Number: 293 Version: 1 Status: Developing =head1 ABSTRACT There are currently two threading models in Perl. The first was 5.005s true-threads. This obviously caused problems for numerous modules (and programs alike). It was later replaced by the "virtual" process, who's main benifit was to provide efficient forks through the use of spawning a perl-thread and seperating environment spaces.. Perl5.005's Threading may go away, or it may continue in an experimental stage for a while. At the very least, perl's threading provides an easy way to test CIS OS theory. This RFC attempts to identify at least one existing implementation problem with 5.005 threads, that of auto-variables. To my understanding, there is only one copy of each auto-variable, and thus, multiple threads would have race conditions for them. =head1 DESCRIPTION Make auto-variables in a threading environment "thread-specific". The current implementation of: for my $i ( 0 .. 100000 ) { do something } causes core dumps when there are race conditions. It is my guess that the problem is because this produces a lazy iteration which unfortunately makes use of an auto-variable other than $i (above). It is these sort of auto-vars (especially in light of lazy operators), that can cause race-conditions. Normally you would provide locks to protect such code, but it is not obvious to the developer that a simple for-loop using a lexical variable would even have a race condition. Beyond that, it might be possible that the generation of such auto-vars might not be thread-safe. =head1 IMPLEMENTATION For all auto-generated non-lexical meta-data, either apply a lock around usage, or make heavy use of thread-specific keys/variables. =head1 REFERENCES RFC 185: Thread Programming Model perldoc Thread: 5.005 threading RFC 178: Lightweight Threads RFC 1: Implementation of Threads in Perl man perlop: foreach lazy iteration of 1..10 RFC 24: Data types: Semi-finite (lazy) lists RFC 123: Builtin: lazy RFC 128: Subroutines: Extend subroutine contexts to include name parameters and lazy arguments RFC 285: Lazy Input