ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

26.10.2009, 14:10
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
Код:
#!/usr/bin/perl
use threads;
use threads::shared;
my $n : shared;
$a = gets();
print $_, "\n" for @$a;
#print $a . "\n";
sub gets {
$thr = 10;
$n = 0;
for(0..$thr) {
$trl[$_] = threads->create(\&gets1);
}
for(0..$thr) {
$res[$_] = $trl[$_]->join;
}
sub gets1 {
$| = 1;
$ii = "";
while ($n < 10) {
{ lock($n);
$n++; }
$ii .= $n;
$hash{$n} = $ii;
#print $ii . "\n";
}
#print $ii, "\n";
return \%hash
}
return \@res;
}
Относительно кода выше - как вернуть хеш, не так же ведь. И надо ли его шарить в мультитреде. Т.е. нужно, чтобы ключи у хеша были именно как в коде выше = $n. Только так потом можно будет идентифицировать данные
Последний раз редактировалось Pashkela; 26.10.2009 в 14:13..
|
|
|

26.10.2009, 14:36
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
Ну если юзать расшаренный хэш, то
Код:
#!/usr/bin/perl
use threads;
use threads::shared;
my $n : shared;
my %hash : shared = ();
#my $refhash : shared = \%hash;
$a = gets();
print $_, ' => ', $hash{$_}, "\n" for keys %hash;
sub gets {
$thr = 10;
$n = 0;
%res = ();
for(0..$thr) {
$trl[$_] = threads->create(\&gets1);
}
for(0..$thr) {
$trl[$_]->join;
}
sub gets1 {
$| = 1;
$ii = "";
while ($n < 10) {
{ lock($n);
$n++; }
$ii .= $n;
$hash{$n} = $ii;
}
}
}
|
|
|

26.10.2009, 14:41
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
спасибо, только чото не пойму - нет ретурна, что такое %res = (); и какую функцию несет
Но это то, что надо, так или иначе!!!! Сенкс большое
|
|
|

26.10.2009, 14:56
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
%res = (); - это пустой хэш )
Ретурны я убрал, т.к. хэш расшаренный и возвращать как бы ничего не надо. А вот пример без использования шарного хэша и с ретурнами
Код:
#!/usr/bin/perl
use threads;
use threads::shared;
my $n : shared;
$a = gets();
print $_, ' => ', $a->{$_}, "\n" for sort {$a <=> $b} keys %$a;
#print $a . "\n";
sub gets {
$thr = 10;
$n = 0;
%res = ();
for(0..$thr) {
$trl[$_] = threads->create(\&gets1);
}
for(0..$thr) {
#$res[$_] = $trl[$_]->join;
%res = (%res, %{$trl[$_]->join});
#print $n, "\n";
}
sub gets1 {
$| = 1;
$ii = "";
while ($n < 10) {
{ lock($n);
$n++; }
$ii .= $n;
$hash{$n} = $ii;
#print $ii . "\n";
}
#print $ii, "\n";
return \%hash
}
return \%res;
}
|
|
|

26.10.2009, 15:09
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
Великолепно! Оба варианта рабочие. Чем один лучше или хуже другого? Шара больше памяти жрет при большом потоке или ...?
|
|
|

27.10.2009, 05:07
|
|
Участник форума
Регистрация: 10.10.2009
Сообщений: 133
Провел на форуме: 143706
Репутация:
-1
|
|
PHP код:
my @fuck = (1..10);
my @s = (18,19);
sub shit {
my(@x,@y) = @_;
print @x."\r\n";
print @y."\r\n";
}
shit(@fuck,@s);
system("PAUSE");
Выводит 12,0  .Хотел вывести значения обоих массивов...
|
|
|

27.10.2009, 07:58
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
Сообщение от GenTao
PHP код:
my @fuck = (1..10);
my @s = (18,19);
sub shit {
my(@x,@y) = @_;
print @x."\r\n";
print @y."\r\n";
}
shit(@fuck,@s);
system("PAUSE");
Выводит 12,0  .Хотел вывести значения обоих массивов...
Код:
#!/usr/bin/perl
use strict;
use warnings;
$\ = "\n";
my @fuck = (1..10);
my @s = (18,19);
sub shit {
my ($x, $y) = @_;
print join ', ', @$x;
print join ', ', @$y;
}
shit (\@fuck, \@s);
|
|
|

27.10.2009, 05:37
|
|
Участник форума
Регистрация: 10.10.2009
Сообщений: 133
Провел на форуме: 143706
Репутация:
-1
|
|
Как осуществить запись в фаил?:
open(b,">s.txt);
print b "sam";
close(b);
В итоге пусто(
|
|
|

27.10.2009, 05:42
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
#!/usr/bin/perl
open(b,">>s.txt");
print b "sam";
close(b);
|
|
|

27.10.2009, 05:51
|
|
Участник форума
Регистрация: 10.10.2009
Сообщений: 133
Провел на форуме: 143706
Репутация:
-1
|
|
хмм,запись заработала,а вот чтение хромает:
open(b,"<s.txt");
print b STDOUT; # по всякому уже))разве что в другой фаил копирнуть могу,но на #консольку хотел
close(b);
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|