2010-12-27 12 views
7

Ich bin ein neuer Erlang, und Erlang ist Concurrency-orientierte Programmierung, es hat keine veränderlichen Datenstrukturen, deshalb ist es einfach zu parallelisieren.Wie greift erlang auf freigegebene Ressourcen zu?

Wie auch immer, freigegebene Ressource ist immer noch vorhanden, zum Beispiel in die gleiche Datei schreiben. Wie synchronisiert erlang in diesem Fall den Zugriff auf die gemeinsame Ressource zwischen zwei Prozessen?

Antwort

11

In der Regel, was Sie tun können, ist ein Prozess verantwortlich für den Zugriff auf die freigegebene Ressource. Andere Prozesse würden Nachrichten an den Einzelmanagerprozess senden, um Anforderungen zum Lesen oder Schreiben von Informationen an die gemeinsam genutzte Ressource zu senden.

Einige gemeinsam genutzte Ressourcen (z. B. einige Arten von ETS-Tabellen) können von mehreren Prozessen gelesen werden, aber nur ein Prozess kann schreiben zu ihm. Sie könnten also einen Prozess einrichten, um Schreibvorgänge in die Tabelle zu serialisieren, aber von ihm lesen lassen.

+0

Auch aus meiner Erfahrung wird der Prozess, der für die Serialisierung der Anfrage verantwortlich ist, oft als generischer Server (gen_server) implementiert: http://www.erlang.org/doc/man/gen_server.html. –

+1

Sie können mehrere Schreiber zu einer ETS-Tabelle hinzufügen. Es hat ein Bucket-Locking-Schema IIRC, also ist es ziemlich schnell, es sei denn, verschiedene Prozesse schreiben Operationen kollidieren. Ein Tuple-Space ist eine gute Analogie für ETS. –

Verwandte Themen