Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > Передача данных и синхронизирование потоков


Автор: Arius 4.8.2008, 17:35
Привет всем! Есть небольшой вопрос новичка в пёрле такая трабла есть два потока и переменная в основном потоке она увеличивается на 1 а в дочернем выводиться на экран так вот во втором потоке она пустая вот код

use threads;
use threads::shared;
use Time::localtime;
use IO::Socket;

my $owner;
my $ping = threads->create(\&ping_thread);

while(1)
{
  $owner = $owner + 1;
  print "owner in main thread is: ", $owner , "\n";
  sleep(1);
}

sub ping_thread
{
    my $terminated = 0;
    while($terminated == 0)
    {
        my $datetime = localtime (time);
        printf "Time is: %02d:%02d\n", $datetime->hour(), $datetime->min();
        print "owner in thread is: ",$owner,"\n";
        sleep(1);
    }
}

результат:
owner in main thread is: 1
Time is: 17:34
owner in thread is:
owner in main thread is: 2
Time is: 17:34
owner in thread is:
owner in main thread is: 3
Time is: 17:34
owner in thread is:
owner in main thread is: 4
Time is: 17:34
owner in thread is:
owner in main thread is: 5
Time is: 17:34
owner in thread is:
owner in main thread is: 6
Time is: 17:34
owner in thread is:
owner in main thread is: 7
Time is: 17:34
owner in thread is:

может нужна какая синхронизация например как в си++ через мутексы симофоры или ивенты подскажите кто знает в чём проблема

Автор: nitr 4.8.2008, 17:58
может объявить
Код

my $owner :shared;


Добавлено через 22 секунды
;)

Автор: Arius 4.8.2008, 18:20
Спасибо огромное а то бился об стенку :  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)