new und multithreading
-
Ist eigentlich jedes new automatisch synchronisiert, oder wie wird sicher gestellt, dass nicht zwei threads den gleichen speicher bekommen?
-
hjdfgh schrieb:
Ist eigentlich jedes new automatisch synchronisiert, oder wie wird sicher gestellt, dass nicht zwei threads den gleichen speicher bekommen?
Ohne mich genau danach erkundigt zu haben, würde ich antworten:
a) Nein und
b) musst Du selbst machen.
"Threading" ist kein Thema der Sprache, sondern muss mit Betriebssystemmitteln organisiert werden. Allerdings gibt's Libs, die da Standardschnittstellen bieten (z.B. pthreads).Gruß,
Simon2.
-
Wenn dein Compiler eine RTL mit Multithreading-Unterstützung bietet (und das tun praktisch alle verfügbaren Compiler), dann kann der Memory-Manager selbstverständlich damit umgehen. Die Frage ist eher, wie er es bewerkstelligt: ob er sich mittels Locking synchronisiert, oder ob er den einzelnen Threads Zugriff auf separate Pools ermöglicht. Davon hängt ab, wie gut gleichzeitige Allokation in mehreren Threads sich skalieren läßt.
Aber nur durch das Verwenden von new in mehreren Threads zugleich wirst du keine Probleme zu erwarten haben.
-
hjdfgh schrieb:
Ist eigentlich jedes new automatisch synchronisiert
Vorausgesetzt du verwendest eine C++ Implementierung die "threadsafe" ist, dann ja.
Bzw. "synchronisiert" ist relaitv. Es gibt auch allocatoren die (in den meisten Fällen) ohne Mutex/Critical-Section Lock bei "new" auskommen. Wichtig ist nur zu wissen: du musst dich nicht selbst darum kümmern!