के साथ ithreads का उपयोग करने में त्रुटि मैंने अभी एक पर्ल प्रोग्राम में धागे प्रस्तुत किए हैं, जहां इसके मॉड्यूल में से एक Memoize का उपयोग कर रहा था। मुझे यह त्रुटि संदेश मिल रहा है:मेमोइज़
थ्रेड 1 असामान्य रूप से समाप्त हो गया: बेनामी फ़ंक्शन वर्जित स्केलर संदर्भ में बुलाया गया; गलती
त्रुटि तब होती है जब मेरे पास धागे और यादें हों, लेकिन अगर मैं इन तत्वों में से किसी एक को हटा दूंगा तो गायब हो जाएगा। लेकिन समस्या यह नहीं है क्योंकि ज्ञापन थ्रेड-सुरक्षित नहीं है - मेरे कोड में, सभी ज्ञापन एक ही थ्रेड के भीतर होता है।
क्या यह ज्ञापन के साथ एक बग है? क्या मैं इस तरह से काम कर सकता हूं? अन्यथा मैं Memoize से छुटकारा पाने जा रहा हूँ।
use strict;
use warnings;
use threads;
use Thread::Semaphore;
use Memoize;
my $semaphore = Thread::Semaphore->new;
memoize('foo');
sub foo {
return shift;
}
sub invoke_foo {
$semaphore->down; # ensure memoization is thread-safe
my $result = foo(@_);
$semaphore->up;
return $result;
}
my @threads;
foreach (1 .. 5) {
my $t = threads->create(sub { invoke_foo($_) });
push @threads, $t;
}
$_->join foreach @threads;
आप किस संस्करण का पर्ल चल रहे हैं? ([यह बग] (https://rt.perl.org/rt3/Public/Bug/Display.html?id=79996) के कारण पूछ रहा है।) – Mat
मैं स्ट्रॉबेरी पर्ल 5.12.3 का उपयोग Memoize 1.02 के साथ कर रहा हूं। मैं उस बग को पुन: पेश नहीं कर सका। – stevenl