2010-07-22 8 views
6

Ich habe folgende Perl-Code:Schieben Sie eine Variable auf ein Array eine ThreadSafe-Operation?

push(@myArray, $myValue); 

Ist die Operation atomar, oder muss ich Schlösser verwenden, wenn mehrere Threads dieselbe Operation auf viele Threads auftreten werden?

+0

Scheint, Sie möchten ein Thrread :: Queue-Objekt. – MkV

+0

Was meinst du "gleiche Operation"? Wird @myArray geteilt? –

Antwort

2

Die Thread-Sicherheit der meisten Funktionen in Perl hängt von den ihnen zugrunde liegenden C-Routinen ab, und im Fall von Einbauten wie push wird die Thread-Sicherheit nicht erwähnt, Sie müssen also davon ausgehen, dass dies nicht der Fall ist.

Überprüfen Sie die perlthrtut man-Seite, insbesondere den Abschnitt mit dem Titel "Basic Semaphors". Mit einem Semaphor können Sie den gegenseitigen Ausschluss in beliebigen Codeabschnitten erzwingen.