Hello again skatpally,
Sorry for the late reply but I got busy with something else.
Regarding your question what I am looking is when the file is locked and multiple Perl commands are triggered. I want to know an approach where each of the commands is in the queue and each gets triggered one after another. I think the best solution to your problem is Thread::Queue.
More specifically you should read the Thread::Queue/ADVANCED METHODS. There you will find ways in checking/adding/altering the queue of you commands in a way you desire.
The link that I provided you contains an example of this module Re^3: perl script and queue. Any way, a more complete code example that could give you a close solution to what you desire is provided bellow.
Sample of executable code:
#!/usr/bin/perl
use strict;
use threads;
use warnings;
use feature 'say';
use Thread::Queue;
sub executeCommands {
my ($commands) = @_;
say $commands;
}
my $q = Thread::Queue->new(); # A new empty queue
# Set a size for a queue
$q->limit = 5;
# Worker thread
my $thr = threads->create(
sub {
# Thread will loop until no more work
while (defined(my $item = $q->dequeue())) {
# Do work on $item
executeCommands($item);
}
}
);
my @commands = ("Command_1", "Command_2");
# Send work to the thread
$q->enqueue(@commands);
{
lock($q); # Keep other threads from changing the queue's content
+s
my @secondary_commands = ("Command_3", "Command_4");
# Insert two items into the queue in the head
$q->insert(-2, @secondary_commands);
my $item = $q->peek();
# do something with the items in queue if desired
if ($item eq "Command_3") {
my @third_commands = ("Command_5", "Command_6");
# Insert two items into the queue just behind the peek
$q->enqueue(@third_commands);
}
}
# Queue is now unlocked
# Signal that there is no more work to be sent
$q->end();
# Join up with the thread when it finishes
$thr->join();
__END__
$ perl test.pl
Command_3
Command_4
Command_1
Command_2
Command_5
Command_6
Hope this helps, BR.
Seeking for Perl wisdom...on the process of learning...not there...yet!
|