C++ Core Guidelines: Die Auflösung des Rätsels

 

Heute löse ich das Rätsel des letzten Artikels auf. Dank meiner Leser ist die Problemanalyse sehr genau.

Hier geht es zum Artikel auf Heise Develor: .

Kommentare   

0 #1 McNepp 2018-07-02 12:10
Die Erklärung des fehlerhaften Codes überzeugt mich nicht. Im gezeigten Beispiel wird ein std::atomic mit einem raw-pointer-type verwendet. Das bedeutet, dass kein automatisches Speichermanagement stattfindet.
Da nirgends im Code Speicher freigegeben wird, kann die zumindest die beschriebene Race-Condition (es wird dieselbe Heap-Adresse wiederverwendet) garnicht auftreten.
Stattdessen hinterlässt die Funktion foo() ein Memory-Leak.

Der eigentliche Fehler des gezeigten Codes liegt meiner Meinung nach daran, dass der aktuelle "Snapshot" der atomic-Variablen außerhalb der Loop nur einmal geholt wird.
Die "kanonische compare-and-update-loop" erfordert aber, dass der Snapshot innerhalb der Schleife geholt wird, d.h. ggf. mehrmals!
Zitieren

Kommentar schreiben


Abonniere den Newsletter (+ pdf Päckchen)

Beiträge-Archiv

Sourcecode

Neuste Kommentare