Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка хэша 2 потоками 
:(
    Опции темы
Egik2
Дата 24.9.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 29.7.2008
Где: Агудзера

Репутация: нет
Всего: 11



Помогите, как сделать, чтобы этот скрипт работал, то есть 
когда я в одном потоке добавляю новое значение, я мог его
обрабатывать другим потоком.
Текст скрипта:
Код

#!/usr/bin/perl

use strict;
use threads;

my $hash = {
          1 => 'one',
          2 => 'two'
        };
my $fi = threads->new(\&fi_sub);
my $se = threads->new(\&se_sub,);
$_->join() foreach ($fi, $se);
sub fi_sub {
    $hash->{3}= 'three';
}

sub se_sub {
    sleep(1);
    foreach my $v (keys %$hash){
        print $hash->{$v}.'='.$v;
    }
}



--------------------
Три великие добродетели программиста: лень, нетерпение и самомнение (Larry Wall)
a-nav.com
developer-blog.ru
world-poetry.org
PM MAIL WWW ICQ   Вверх
Nuclon
Дата 24.9.2008, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 13.8.2008
Где: Днепропетровск, У краина

Репутация: нет
Всего: нет



читать про threads::shared

там ничего сложного, по примерам все понятно
PM MAIL   Вверх
Egik2
Дата 25.9.2008, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 29.7.2008
Где: Агудзера

Репутация: нет
Всего: 11



Спасибо за ссылку, я немного разобрался, добился, чтобы работало, но как-то криво 
скрипт стал выглядеть. Может можно как-то получше написать.
просто мне необходимо хранить сложную структуру

Код

#!/usr/bin/perl

use strict;
use threads;
use threads::shared;

my    $session_hash;
share($session_hash);
$session_hash = &share({});

share($session_hash->{'1'});
$session_hash->{'1'} = &share([]);
$session_hash->{'1'}->[0] = &share([]);
$session_hash->{'1'}->[0]->[0] = 'ONE';
$session_hash->{'1'}->[0]->[1] = 1;



my $fi = threads->new(\&fi_sub);
my $se = threads->new(\&se_sub,);
$_->join() foreach ($fi, $se);

sub fi_sub {

    share($session_hash->{'3'});
    $session_hash->{'3'} = &share([]);
    share($session_hash->{'3'}->[0]);
    $session_hash->{'3'}->[0] = &share([]);
    $session_hash->{'3'}->[1] = &share([]);
    $session_hash->{'3'}->[2] = &share([]);
    $session_hash->{'3'}->[0]->[0] = 'THREE1';
    $session_hash->{'3'}->[0]->[1] = 1;
    $session_hash->{'3'}->[1]->[0] = 'THREE2';
    $session_hash->{'3'}->[1]->[1] = 1;
    $session_hash->{'3'}->[2]->[0] = 'THREE3';
    $session_hash->{'3'}->[2]->[1] = 0;
}

sub se_sub {
    foreach my $v (keys %$session_hash){
        print $v."\n";
        foreach my $hr (@{$session_hash->{$v}}){
            print "sess = $v ".$hr->[0].' '.$hr->[1]."\n";
        }
    }

}



--------------------
Три великие добродетели программиста: лень, нетерпение и самомнение (Larry Wall)
a-nav.com
developer-blog.ru
world-poetry.org
PM MAIL WWW ICQ   Вверх
Nuclon
Дата 25.9.2008, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 13.8.2008
Где: Днепропетровск, У краина

Репутация: нет
Всего: нет



а для этого можно юзать Thread::Shared

Это сообщение отредактировал(а) Nuclon - 25.9.2008, 10:01
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0405 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.