Hi All,
I want to create few threads and want to share objects of class between
threads. Although there is a package Thread::Queue but it only allows
sharing of scalar data.
I tried sending data as a reference parameter to thread but seems like it is
passed as value to thread function. Here is an example where I am passing
reference to scalar variable to the thread function.
*$ cat ref.pl *
#!/usr/bin/perl
use threads;
sub func1()
{
my $i = shift;
print "In thread value: $$i\n";
$$i = 100;
print "In thread value: $$i\n";
}
sub func2()
{
my $i = shift;
print "func2: i: $$i\n";
$$i = 30;
}
sub func3()
{
my $i = shift;
$$i = 10;
&func2($i);
}
my $i = 0;
&func3(\$i);
print "i = $i\n";
my $thr = threads->create(\&func1, \$i);
$thr->join();
print "i = $i\n";
*$ perl ref.pl *
func2: i: 10
i = 30
In thread value: 30
In thread value: 100
i = 30
As you can see even though $i is passed as reference to thread function, but
value changed in thread function is not getting reflected in main thread.
I know for scalar i can use Thread::Queue package, but I want to exchange
objects of a class. I tried this example just to validate the concept.
Is there any way I can share objects across threads? These objects are not
global.
Thanks and Regards,
Prasad