«Свободный в неправильный пул в C: / x / perl / lib / XML / Parser / Expat .pm строка 432 во время глобального уничтожения». Есть ли способ решить это? - PullRequest
0 голосов
/ 21 июня 2019

По сути, я хочу реализовать многопоточность в некотором коде, и в этом коде я использую библиотеку Perl XML, но на самом деле я не собираюсь выигрывать время в этот момент кода, но я хочу, чтобы все остальное работало, но этоне работает, даже если я не использую эту библиотеку в коде, в котором я хочу реализовать потоки:

use threads;
use xmlparser;

my $file = "project.xml";

#Call the XML Parser
(my $hash_ref,my $exit_state) = xmlparser::ProjectXmlParser($file);

#Define the number of threads
my $num_of_threads = 2;

# use the initThreads subroutine to create an array of threads.
my @threads = initThreads();

# Loop through the array:   
foreach(@threads)
{
    #Tell each thread to perform our 'sub1()' subroutine.
    $_ = threads->create(\&sub1);
}

# This tells the main program to keep running until all threads have finished.
foreach(@threads)
{
    $_->join();
}

####################### SUBROUTINES ############################

sub initThreads
{
    my @initThreads;
    for(my $i = 1;$i<=$num_of_threads;$i++)
    {
        push(@initThreads,$i);
    }
    return @initThreads;
}

sub sub1 {
    sleep(1);
    print "\nIn the thread\n\n";
}

Есть ли способ устранить эту ошибку или альтернативную поточно-безопасную библиотеку?Заранее спасибо!

1 Ответ

0 голосов
/ 21 июня 2019

Вам нужен парсер во всех темах? Библиотека, вероятно, не является поточно-ориентированной, поэтому вы не можете использовать ее из более чем одного потока. Если его достаточно использовать в одном потоке, не используйте , но требуется вместо этого в единственном потоке, который в этом нуждается.

...