Автор Тема: потоки, и shared хеши  (Прочитано 4598 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн darkyn

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
потоки, и shared хеши
« : 11 Октября 2006, 16:17:26 »
появилась необходимость хранить множество информации о каждом работающем потоке в общем хеше.

что бы было понятней сразу часть кода:
my %MODULES :shared = () ;

потом в определенный момент хеш заполняется параметрами
$MODULES{$mod_name} = (
   \'subs\' => {constructor=>\'\',destructor=>\'\',entrypoint=>\'\'},
   \'info\' => {}, \'messages\' => [] );

здесь-то и появляется ошибка "Invalid value for shared scalar" =(
это какие-то ограничения на shared переменные?
как правильно реализовать наполнение хеша $MODULES?

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
потоки, и shared хеши
« Ответ #1 : 11 Октября 2006, 16:47:57 »
$MODULES{$mod_name} ={ ... } ?

Оффлайн darkyn

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
потоки, и shared хеши
« Ответ #2 : 11 Октября 2006, 17:25:49 »
ошибся со скобками в первом посте. у меня в коде так и прописано. вот только пока хеш %MODULES не является shared всё нормально присваевается, когда объявлю его как :shared сразу начинает ругаться той же ошибкой "Invalid value for shared scalar"

сделал маленький тест:

#!/usr/bin/perl -w

use strict;
use Data::Dumper;
use threads;
use threads::shared;

my %MODULES :shared = () ;

my $name = \'test_key\';
$MODULES{$name } = {
     \'subs\' => {c=>\'\',d=>\'\',e=>\'\'},
     \'info\' => {},
     \'messages\' => [] };

print "\\r\\n";
print Dumper(\\%MODULES);
print "\\r\\n";

как же всё это заставить работать?) и в чём именно проблема?)

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
потоки, и shared хеши
« Ответ #3 : 11 Октября 2006, 22:44:20 »
from perldoc threads::shared

---
The only values that can be assigned to a shared scalar are other scalar values, or shared refs:

  my $var :shared;
  $var = 1;              # ok
  $var = [];             # error
  $var = &share([]);     # ok
0 OK, 0:1

Оффлайн darkyn

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
потоки, и shared хеши
« Ответ #4 : 12 Октября 2006, 12:10:18 »
вот так всегда. спешишь, спешишь... а всё лечит rtfm ; )

Оффлайн darkyn

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
потоки, и shared хеши
« Ответ #5 : 13 Октября 2006, 11:33:48 »
немного продолжая тему:

при попытке:
...
$constructor = \\&some_function ;
$MODULES{$name}{subs}{constructor} = $constructor ;
...
^^^ вылетает с ошибкой \'Invalid value for shared scalar\'

[?]  возможно ли это? и каким образом можно положить в shared переменную ссылку на функцию?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28