Perl tân binh ở đây, vì vậy hãy nhẹ nhàng :)Perl luồng của phương pháp đối tượng
Tôi đã viết mã sau để theo dõi con chó của tôi khi tôi đang săn (không thực sự). Mỗi khi một con chó tìm thấy một con vịt, nó báo hiệu sợi chính, sau đó thu thập thông tin từ mỗi con chó trong gói.
#!/usr/bin/env perl
use strict;
use warnings;
use v5.14;
use threads;
{
package Dog;
sub new {
my ($class, $name, $dt) = @_;
my $self = {
dt => $dt, # will find a duck every $dt seconds
name => $name,
ducksfound => 0
};
bless $self, $class;
}
sub hunt {
#
# the "thread" method -- the dog will hang around for $dt seconds,
# then alert the main thread by sending SIGUSR1
#
my $self = shift;
while (1) {
sleep $self->{dt};
$self->{ducksfound} += 1;
kill USR1 => $$;
}
}
sub bark {
my $self = shift;
sprintf "%s: found %d ducks!", ($self->{name}, $self->{ducksfound});
}
1;
}
my @dogs;
$SIG{USR1} = sub {
say join ", ", map { $_->bark } @dogs;
};
push @dogs, Dog->new("Labrador", 1);
push @dogs, Dog->new("Retriever", 2);
push @dogs, Dog->new("Shepherd", 3);
threads->create(sub { $_->hunt }) for @dogs;
$_->join for threads->list;
sản lượng dự kiến của các mã trên sẽ là một cái gì đó như:
Labrador: tìm thấy 1 con vịt !, Retriever: tìm thấy 0 vịt !, Shepherd: tìm thấy 0 vịt!
Labrador: tìm thấy 2 con vịt !, Retriever: tìm thấy 0 con vịt !, Shepherd: tìm thấy 0 con vịt!
Labrador: tìm thấy 3 con vịt !, Retriever: tìm thấy 0 con vịt !, Shepherd: tìm thấy 0 con vịt!
Labrador: tìm thấy 3 con vịt !, Retriever: tìm thấy 1 con vịt !, Shepherd: tìm thấy 0 con vịt!
Labrador: tìm thấy 4 con vịt !, Retriever: tìm thấy 1 con vịt !, Shepherd: tìm thấy 0 con vịt!
Labrador: tìm thấy 5 con vịt !, Retriever: tìm thấy 1 con vịt !, Shepherd: tìm thấy 0 con vịt!
Labrador: tìm thấy 6 con vịt !, Retriever: tìm thấy 1 con vịt !, Shepherd: tìm thấy 0 con vịt!
Labrador: tìm thấy 6 con vịt !, Retriever: tìm thấy 1 con vịt !, Shepherd: tìm thấy 0 con vịt!
Labrador: tìm thấy 6 con vịt !, Retriever: tìm thấy 1 con vịt !, Shepherd: tìm thấy 1 con vịt!
Thay vào đó, những gì tôi nhận được là như sau:
Labrador: tìm thấy 1 con vịt !, Retriever: tìm thấy 0 vịt !, Shepherd: tìm thấy 0 vịt!
Labrador: tìm thấy 2 con vịt !, Retriever: tìm thấy 0 con vịt !, Shepherd: tìm thấy 0 con vịt!
Labrador: tìm thấy 3 con vịt !, Retriever: tìm thấy 0 con vịt !, Shepherd: tìm thấy 0 con vịt!
Labrador: tìm thấy 0 con vịt !, Retriever: tìm thấy 1 con vịt !, Shepherd: tìm thấy 0 con vịt!
Labrador: tìm thấy 4 con vịt !, Retriever: tìm thấy 0 con vịt !, Shepherd: tìm thấy 0 con vịt!
Labrador: tìm thấy 5 con vịt !, Retriever: tìm thấy 0 con vịt !, Shepherd: tìm thấy 0 con vịt!
Labrador: tìm thấy 0 con vịt !, Retriever: tìm thấy 2 con vịt !, Shepherd: tìm thấy 0 con vịt!
Labrador: tìm thấy 0 con vịt !, Retriever: tìm thấy 0 con vịt !, Shepherd: tìm thấy 1 con vịt!
Lưu ý cách đếm của mỗi con chó được đặt lại về 0 tiếng mà một chú chó khác đang nói.
Bất kỳ thông tin chi tiết nào về chú thích cụ thể mà tôi phải chú ý khi đọc Llama?
Đây là một câu hỏi khá hay cho một tân binh Perl. :) –
tín hiệu và chủ đề không pha trộn tốt. bạn không thể báo hiệu một chuỗi cụ thể afaik. cập nhật: có vẻ như các chủ đề doc không đồng ý, nhưng hiển thị bằng cách sử dụng '$ thr-> kill', không đồng nghĩa giết – ysth
@JonahBishop - cảm ơn, tôi đoán :) Got mất kiên nhẫn nửa chừng qua Alpaca, bắt đầu gãi một trong những itches proverbial của tôi ... đoán đây là những gì tôi nhận được cho mã hóa lần lượt :) –