#!/usr/bin/perl use strict; use forks; use forks::shared; # "Gloabeles" Array als gemeinsame Variable angeben, # somit teilen sich die Threads das Array # statt sich eine Kopier im Adressraum anzulegen my @stack : shared; my $tempvar : shared; $tempvar = 10000; for(my $i = 0; $i < 10000; $i++) { $stack[$i] = $i; } my $thread1 = threads->new(\&echo, 1); my $thread2 = threads->new(\&echo, 2); my $thread3 = threads->new(\&echo, 3); my $thread4 = threads->new(\&echo, 4); $thread1->join(); $thread2->join(); $thread3->join(); $thread4->join(); print "threads erstellt!\n"; sub echo { # Name des Threads my $thread = $_[0]; my $temp=""; do { # sichert das Array vor dem Zugriff des anderen Threads lock @stack; # holt sich den letzten Wert aus dem Array $temp = pop(@stack); $tempvar-= $temp; # aus gabe des Threads open(LOG, ">>thread.log"); print "Thead ".$thread." print ".$temp." uebersprungen".$tempvar."\n"; print LOG $temp."\n"; close(LOG); $tempvar = $temp; # schickt den Thread erst mal schlafen } while($temp >=4) }