{"id":7887,"date":"2025-11-29T07:30:25","date_gmt":"2025-11-29T06:30:25","guid":{"rendered":"https:\/\/web-dev-weissblau.de\/microconsult\/?p=7887"},"modified":"2026-02-13T08:18:26","modified_gmt":"2026-02-13T07:18:26","slug":"parallel-programming-without-spinlocks","status":"publish","type":"post","link":"https:\/\/www.microconsult.de\/en\/parallele-programmierung-ohne-spinlocks\/","title":{"rendered":"Parallel programming without spinlocks"},"content":{"rendered":"<h2>Wie man Deadlocks vermeiden kann<\/h2>\n<p style=\"text-align: left;\" align=\"center\">Autoren: Jens Harnisch, Li Lin, Albrecht Mayer, Gerhard Wirrer, Infineon Technologies AG<\/p>\n<h3>Beitrag &#8211; Embedded Software Engineering Kongress 2017<\/h3>\n<p><strong>Um die Leistungsf\u00e4higkeit moderner Mehrkernprozessoren nutzen zu k\u00f6nnen, sind je nach Anwendung eine gewisse Synchronisation, zum Beispiel durch Barrieren, und ein Schutz von Ressourcen, zum Beispiel durch Spinlocks, notwendig. Dadurch k\u00f6nnen Deadlocks entstehen, welche nat\u00fcrlich besonders f\u00fcr sicherheitskritische Systeme unerw\u00fcnscht sind. Ein alternatives Pro\u00adgrammier\u00admuster sind lockfreie Algorithmen. Diese m\u00fcssen f\u00fcr die von mehreren Kernen gemeinsam genutzten Datenstrukturen speziell angepasst werden. Es wird eine unbegrenzte Queue vorgestellt, bewertet und in Bezug zu anderen Herangehensweisen gesetzt.<\/strong><\/p>\n<h2>Motivation: Spinlocks und ihre Probleme<\/h2>\n<p>Mutexe, Semaphore und Events werden zur Synchronisation paralleler Prozesse \u00a0und zum Schutz gemeinsam genutzter Ressourcen, z.B. Datenstrukturen, von Betriebs\u00adsystemen bereitgestellt.<\/p>\n<p>Zur Implementierung werden atomare Instruktionen der jeweiligen Rechner\u00adarchitektur genutzt. Eine Pseudonotierung f\u00fcr ein Spinlock wird im Folgenden angegeben:<\/p>\n<p class=\"quellcode\" align=\"left\">inline void get_spinlock(volatile unsigned long* spinlock_ptr)<\/p>\n<p class=\"quellcode\" align=\"left\">{<\/p>\n<p class=\"quellcode\" align=\"left\">\u00a0\u00a0\u00a0\u00a0 while (swap(spinlock_ptr, BUSY) == BUSY)<\/p>\n<p class=\"quellcode\" align=\"left\">\u00a0\u00a0\u00a0\u00a0 ;<\/p>\n<p class=\"quellcode\" align=\"left\">}<\/p>\n<p>Die Funktion swap, innerhalb welcher dann der atomare Maschinenbefehl swap Befehl genutzt wird, liest den aktuellen Wert von der Adresse spinlock_ptr und schreibt den Wert BUSY an die Adresse von spinlock_ptr. Die Ausf\u00fchrung des Maschinenbefehls an sich wird ohne Blockade funktionieren. Aber wenn der Spinlock nicht verf\u00fcgbar wird, dann wird die while-Schleife nicht verlassen; es entsteht ein Deadlock. So k\u00f6nnte es zum Beispiel sein, dass die Software auf einem anderen Kern abgest\u00fcrzt ist und daher der Spinlock nicht mehr freigegeben wird. Spinlocks k\u00f6nnen auch an Priorit\u00e4tsinversion beteiligt sein. Bei mehreren Spinlocks im Design w\u00e4chst die Komplexit\u00e4t. In der ersten Version von Linux f\u00fcr Mehr\u00adkernsysteme gab es daher nur den einen Big Kernel Lock. Allerdings wird damit teilweise die Leistungsf\u00e4higkeit eines Mehrkernsystems auf nur einen Kern reduziert.<\/p>\n<h2>Blockadefreie Programmierung: Prinzipien, Vor- und Nachteile<\/h2>\n<p>Programmierung ohne Blockade (Lock Free Programming) stellt eine seit vielen Jahren bekannte Alternative zur Arbeit mit Mutexen und Spinlocks dar [1]. Dead\u00adlocks k\u00f6nnen damit nicht mehr entstehen. Algorithmen ohne Locks m\u00fcssen auf die zu sch\u00fctzende Datenstruktur angepasst werden, zum Beispiel eine Queue. Oft sind es zwar nur wenige Zeilen Quelltext, aber das Design ist komplex. Weiterhin ver\u00adschenkt man mit diesen Algorithmen potenziell Rechenleistung durch die spekulative Ausf\u00fchrung. Zumindest dieses Problem relativiert sich bei Verf\u00fcgbarkeit vieler Kerne. Das Prinzip lockfreier Programmierung ist gew\u00f6hnlich folgendes:<\/p>\n<ol>\n<li>Anlegen einer Kopie der sensiblen Datenstruktur<\/li>\n<li>Ausf\u00fchrung der Operation auf der Kopie der Datenstruktur<\/li>\n<li>Vor Zur\u00fcckschreiben des Ergebnisses \u00fcberpr\u00fcfen, ob ein anderer Prozess die Struktur mittlerweile ver\u00e4ndert hat. Wenn ja, muss die Operation auf einer neuen Kopie der Struktur\u00a0wiederholt werden (zur\u00fcck zu 1.). Falls die Datenstruktur zwischenzeitlich nicht ver\u00e4ndert wurde, kann die berechnete Datenstruktur zur\u00fcckgeschrieben werden.<\/li>\n<\/ol>\n<p>F\u00fcr die \u00dcberpr\u00fcfung, ob die Datenstruktur zwischenzeitlich ver\u00e4ndert wurde, kann man zum Beispiel einen Pointer nutzen. Zeigt der Pointer noch auf die gleiche Adresse wie beim Anlegen der Kopie, dann hat zwischendurch scheinbar kein anderer Prozess auf der Struktur gearbeitet. Bekannt ist aber das &#8222;ABA&#8220; Problem. Dabei zeigt der Pointer beim Anlegen der Kopie auf Adresse A, ebenso wie auch bei der \u00dcberpr\u00fcfung nach Ausf\u00fchrung der Rechnung. Das kann aber Zufall sein. In Wahrheit zeigte der Pointer zwischen\u00addurch auf die Adresse B, ein weiterer Prozess hat die Struktur zwischenzeitlich manipuliert und sein Ergebnis zur\u00fcckgeschrieben. Wenn wir dieses Problem nicht beachten, \u00fcberschreiben wir das Ergebnis des weiteren Prozesses auf der sensiblen Datenstruktur. Zur L\u00f6sung des Problems kann zum Beispiel ein Z\u00e4hler eingef\u00fchrt werden, der bei jedem Zur\u00fcckschreiben der Struktur erh\u00f6ht wird.<\/p>\n<h2>Beispiel: Eine unbegrenzt Queue<\/h2>\n<p>Im Gegensatz zur Arbeit mit Mutexen oder Spinlocks, welche recht generisch eingesetzt werden k\u00f6nnen, muss lockfreie Programmierung an die jeweilige Datenstruktur angepasst werden, daher zum Beispiel an verlinkte Listen, Stacks oder Warte\u00adschlangen (Queues). Eine lockfreie unbegrenzte Queue, implementiert in C, wird im Folgenden vorgestellt. Die Software wurde auf einem AURIX 2nd Generation Microcontroller mit 6 Kernen in Betrieb genommen.<\/p>\n<p>Kernelement der Queue ist eine Node, mit dem aktuellen Wert und einem Verweis auf den nachfolgenden Node:<\/p>\n<p class=\"quellcode\">struct Node<\/p>\n<p class=\"quellcode\">{<\/p>\n<p class=\"quellcode\">\u00a0\u00a0\u00a0\u00a0 int value;<\/p>\n<p class=\"quellcode\">\u00a0\u00a0\u00a0\u00a0 struct Node* next;<\/p>\n<p class=\"quellcode\">};<\/p>\n<p>Das Design der Queue unterst\u00fctzt unbegrenzt viele Elemente in der Queue. Eine unbegrenzte Anzahl von Elementen ist nat\u00fcrlich unrealistisch f\u00fcr ein eingebettetes System, aber die Unterst\u00fctzung einer variablen Anzahl von Elementen, z.B. erkannter Objekte in einer Szene f\u00fcr autonomes Fahren, ist ein realistisches Szenario. Das Einf\u00fcgen und L\u00f6schen eines Elements wird im Folgenden erkl\u00e4rt.<\/p>\n<p><strong>Einf\u00fcgen eines Elements in die Queue (Enqueue)<br \/>\n<\/strong>Anhand des Knotens mit dem Zeiger auf Ende (s. Bild 1,\u00a0<a title=\"Parallele Programmierung ohne Spinlocks (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_multicore_parallele_programmierung_ohne_spinlocks_infineon_harnischlinmayerwirrer.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) wird der letzte wirkliche Knoten ermittelt. Im Enqueue Schritt 1 wird das aktuelle Ende der Queue ermittelt (Knoten B), und der Zeiger next dieses Knotens B wird umgesetzt von NULL auf die Adresse von Knoten A. Knoten A soll ein neuer Knoten in der Queue werden. Die Queue ist jetzt in sich konsistent, damit kann auch der Zeiger next des Knotens Tail auf die Adresse von Knoten A umgesetzt werden.<\/p>\n<p><strong>L\u00f6schen eines Elementes aus der Queue (Dequeue)<\/strong><br \/>\nMit Hilfe des Knotens Head wird der aktuelle erste Knoten ermittelt; am Anfang ist das der W\u00e4chterknoten, auch genannt Sentinel. Der Knoten Sentinel zeigt auf den Knoten D, den eigentlichen letzten Knoten. In Dequeue Schritt 1 wird der eigentliche Wert des Knotens gelesen. In Schritt 2 wird der Zeiger next des Knoten Head umgesetzt auf Knoten D.<\/p>\n<p>Drei der ausgef\u00fchrten Schritte m\u00fcssen mit einer atomaren Compare-und-Swap Instruktion ausgef\u00fchrt werden, im Bild mit CAS bezeichnet. Die Ausf\u00fchrung der atomaren Instruktion kann nicht blockiert werden. Man kann die obige Implementierung der Queue mit herk\u00f6mmlichen Implementierungen f\u00fcr eine Queue vergleichen. Dort wird entweder ein Spinlock f\u00fcr die gesamte Queue verwendet, egal ob man ein Element l\u00f6scht oder eines hinzuf\u00fcgt. Oder zwei Spinlocks werden ver\u00adwendet, jeweils f\u00fcr Einf\u00fcgen bzw. L\u00f6schen eines Elements. Aber all diese her\u00adk\u00f6mmlichen Implementierungen k\u00f6nnen potenziell blockieren.<\/p>\n<p>Analyse und Test von nicht blockierenden Algorithmen sind eher anspruchsvoller als von blockierenden Algorithmen. Gleichzeitigkeit wird ja bei nicht blockierenden Algorithmen explizit unterst\u00fctzt und nicht zeitweise ausgeschlossen, wie bei Imple\u00admentierungen mit Spinlocks. Auf der anderen Seite handelt es sich um ein weit\u00adgehend nichtsynchronisiertes Programmiermuster und nicht um ein Programmier\u00admuster mit Synchronisation, so wie bei Logical Execution Time. Die Programmierung mit nicht blockierenden Algorithmen \u00e4hnelt letztendlich eher Transactional Memory, bei welchem Transaktionen spekulativ ausgef\u00fchrt, aber bei Konflikten wieder r\u00fcckg\u00e4ngig gemacht werden. Die Komplexit\u00e4t nicht blockierender Algo\u00adrithmen muss auch beim Testen ber\u00fccksichtigt werden. Der entwickelte Algorithmus wurde nicht formal verifiziert, sondern nur analysiert. F\u00fcr diese Analyse war die Verf\u00fcgbarkeit des nichtintrusiven Tracesystems MCDS (Multi-Core Debug Solution) auf der Zielplattform, dem AURIX 2nd Generation Microcontroller TC39x, sehr hilfreich. So konnten verschiedene Szenarien der Gleichzeitigkeit genau nachverfolgt werden, z. B. die Sequenz der Zugriffe durch verschiedene Kerne f\u00fcr eine Korrektheitsanalyse, aber auch das exakte Zeitverhalten f\u00fcr eine Performanzanalyse. Beides wird durch\u00a0 besondere MCDS-Eigenschaften erm\u00f6glicht. Dazu z\u00e4hlt der parallele und zeitlich ausgerichtete Trace an verschiedenen Beobachtungspunkten mit sehr hoher zeitlicher Aufl\u00f6sung.<\/p>\n<h2>Fazit<\/h2>\n<p>Da mit lockfreier Programmierung Deadlocks schon per Design ausgeschlossen sind, kann die Nutzung vor allem in sicherheitskritischer Software vorteilhaft sein. In [1] wurde dokumentiert, wie durch lockfreie Programmierung sogar eine h\u00f6here Performanz als mit Spinlocks erreicht wurde. Auf der anderen Seite muss lockfreie Programmierung immer speziell zugeschnitten werden auf die zu sch\u00fctzende Datenstruktur, und die Implementierungen sind schwerer verst\u00e4ndlich als die Nutzung eines Spinlocks. Obwohl lockfreie Programmierung schon seit vielen Jahren bekannt ist [1], ist die Verbreitung eher beschr\u00e4nkt. Die Unterst\u00fctzung lockfreier Programmierung in der C++ STL durch Execution Policies wird die Verbreitung sicher erh\u00f6hen. Da C++ auch im Embeeded Bereich zunehmend akzeptiert wird, einschlie\u00dflich eingeschr\u00e4nkter Nutzung der STL, wird lockfreie Programmierung sicher auch dort ihren Platz finden, auch in sicherheitskritischen Systemen mit Anforderungen f\u00fcr harte Echtzeit. Um eine konkrete Implementierung zu \u00fcberpr\u00fcfen, ist hardwareunterst\u00fctzes Tracing auf dem Microcontroller das Mittel der Wahl.<\/p>\n<h2>Literatur- und Quellenverzeichnis<\/h2>\n<p>[1] Henry Massalin and Calton Pu. A Lock-Free Multiprocessor OS Kernel. Technical Report CUCS-005-91, Columbia University, 1991.<\/p>\n<p><a title=\"Parallele Programmierung ohne Spinlocks (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_multicore_parallele_programmierung_ohne_spinlocks_infineon_harnischlinmayerwirrer.pdf\" target=\"_blank\" rel=\"noopener\"><strong>Beitrag als PDF downloaden<\/strong><\/a><\/p>\n<hr \/>\n<h2>Multicore &#8211; unsere Trainings &amp; Coachings<\/h2>\n<p><strong>Wollen Sie sich auf den aktuellen Stand der Technik bringen?<\/strong><\/p>\n<p>Dann informieren Sie sich\u00a0<a title=\"Trainings und Termine - Mikrocontroller\" href=\"https:\/\/www.microconsult.de\/alle-trainings-termine-komplettuebersicht\/\" target=\"_blank\" rel=\"noopener\"><strong>hier<\/strong>\u00a0<\/a>zu Schulungen\/ Seminaren\/ Trainings\/ Workshops und individuellen Coachings von MircoConsult zum Thema Multicore \/Mikrocontroller.<\/p>\n<p><strong>Training &amp; Coaching zu den weiteren Themen unseren Portfolios finden Sie\u00a0<a title=\"Training &amp; Beratung - alle Themen\" href=\"https:\/\/www.microconsult.de\/training-beratung\/\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/strong><\/p>\n<hr \/>\n<h2>Multicore &#8211; Fachwissen<\/h2>\n<p>Wertvolles Fachwissen zum Thema Multicore \/Mikrocontroller steht\u00a0<a title=\"Multicore Fachwissen\" href=\"https:\/\/www.microconsult.de\/embedded-multicore\/\" target=\"_blank\" rel=\"noopener\">hier\u00a0<\/a>f\u00fcr Sie zum kostenfreien Download bereit.<\/p>\n<p><a title=\"Multicore Fachwissen\" href=\"https:\/\/www.microconsult.de\/embedded-multicore\/\" target=\"_blank\" rel=\"noopener\"><strong>Zu den Fachinformationen<\/strong><\/a><\/p>\n<p><strong>Fachwissen zu weiteren Themen unseren Portfolios finden Sie <a title=\"Fachinformationen\" href=\"https:\/\/www.microconsult.de\/fachwissen\/\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wie man Deadlocks vermeiden kann Autoren: Jens Harnisch, Li Lin, Albrecht Mayer, Gerhard Wirrer, Infineon Technologies AG Beitrag &#8211; Embedded Software Engineering Kongress 2017 Um die Leistungsf\u00e4higkeit moderner Mehrkernprozessoren nutzen zu k\u00f6nnen, sind je nach Anwendung eine gewisse Synchronisation, zum Beispiel durch Barrieren, und ein Schutz von Ressourcen, zum Beispiel durch Spinlocks, notwendig. Dadurch k\u00f6nnen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-7887","post","type-post","status-publish","format-standard","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Parallele Programmierung ohne Spinlocks - MicroConsult Academy GmbH<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.microconsult.de\/en\/parallel-programming-without-spinlocks\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Parallele Programmierung ohne Spinlocks - MicroConsult Academy GmbH\" \/>\n<meta property=\"og:description\" content=\"Wie man Deadlocks vermeiden kann Autoren: Jens Harnisch, Li Lin, Albrecht Mayer, Gerhard Wirrer, Infineon Technologies AG Beitrag &#8211; Embedded Software Engineering Kongress 2017 Um die Leistungsf\u00e4higkeit moderner Mehrkernprozessoren nutzen zu k\u00f6nnen, sind je nach Anwendung eine gewisse Synchronisation, zum Beispiel durch Barrieren, und ein Schutz von Ressourcen, zum Beispiel durch Spinlocks, notwendig. Dadurch k\u00f6nnen [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microconsult.de\/en\/parallel-programming-without-spinlocks\/\" \/>\n<meta property=\"og:site_name\" content=\"MicroConsult Academy GmbH\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-29T06:30:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-13T07:18:26+00:00\" \/>\n<meta name=\"author\" content=\"weissblau media\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"weissblau media\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/parallele-programmierung-ohne-spinlocks\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/parallele-programmierung-ohne-spinlocks\\\/\"},\"author\":{\"name\":\"weissblau media\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"headline\":\"Parallele Programmierung ohne Spinlocks\",\"datePublished\":\"2025-11-29T06:30:25+00:00\",\"dateModified\":\"2026-02-13T07:18:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/parallele-programmierung-ohne-spinlocks\\\/\"},\"wordCount\":1458,\"commentCount\":0,\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/parallele-programmierung-ohne-spinlocks\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/parallele-programmierung-ohne-spinlocks\\\/\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/parallele-programmierung-ohne-spinlocks\\\/\",\"name\":\"Parallele Programmierung ohne Spinlocks - MicroConsult Academy GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\"},\"datePublished\":\"2025-11-29T06:30:25+00:00\",\"dateModified\":\"2026-02-13T07:18:26+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/parallele-programmierung-ohne-spinlocks\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/parallele-programmierung-ohne-spinlocks\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/parallele-programmierung-ohne-spinlocks\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.microconsult.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Parallele Programmierung ohne Spinlocks\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/\",\"name\":\"MicroConsult Academy GmbH\",\"description\":\"Professionelle Schulungen, Beratung und Projektunterst\u00fctzung\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.microconsult.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\",\"name\":\"weissblau media\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"caption\":\"weissblau media\"},\"sameAs\":[\"https:\\\/\\\/www.microconsult.de\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Parallel programming without spinlocks - MicroConsult Academy GmbH","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.microconsult.de\/en\/parallel-programming-without-spinlocks\/","og_locale":"en_GB","og_type":"article","og_title":"Parallele Programmierung ohne Spinlocks - MicroConsult Academy GmbH","og_description":"Wie man Deadlocks vermeiden kann Autoren: Jens Harnisch, Li Lin, Albrecht Mayer, Gerhard Wirrer, Infineon Technologies AG Beitrag &#8211; Embedded Software Engineering Kongress 2017 Um die Leistungsf\u00e4higkeit moderner Mehrkernprozessoren nutzen zu k\u00f6nnen, sind je nach Anwendung eine gewisse Synchronisation, zum Beispiel durch Barrieren, und ein Schutz von Ressourcen, zum Beispiel durch Spinlocks, notwendig. Dadurch k\u00f6nnen [&hellip;]","og_url":"https:\/\/www.microconsult.de\/en\/parallel-programming-without-spinlocks\/","og_site_name":"MicroConsult Academy GmbH","article_published_time":"2025-11-29T06:30:25+00:00","article_modified_time":"2026-02-13T07:18:26+00:00","author":"weissblau media","twitter_card":"summary_large_image","twitter_misc":{"Written by":"weissblau media","Estimated reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microconsult.de\/parallele-programmierung-ohne-spinlocks\/#article","isPartOf":{"@id":"https:\/\/www.microconsult.de\/parallele-programmierung-ohne-spinlocks\/"},"author":{"name":"weissblau media","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"headline":"Parallele Programmierung ohne Spinlocks","datePublished":"2025-11-29T06:30:25+00:00","dateModified":"2026-02-13T07:18:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microconsult.de\/parallele-programmierung-ohne-spinlocks\/"},"wordCount":1458,"commentCount":0,"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microconsult.de\/parallele-programmierung-ohne-spinlocks\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microconsult.de\/parallele-programmierung-ohne-spinlocks\/","url":"https:\/\/www.microconsult.de\/parallele-programmierung-ohne-spinlocks\/","name":"Parallel programming without spinlocks - MicroConsult Academy GmbH","isPartOf":{"@id":"https:\/\/www.microconsult.de\/#website"},"datePublished":"2025-11-29T06:30:25+00:00","dateModified":"2026-02-13T07:18:26+00:00","author":{"@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"breadcrumb":{"@id":"https:\/\/www.microconsult.de\/parallele-programmierung-ohne-spinlocks\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microconsult.de\/parallele-programmierung-ohne-spinlocks\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.microconsult.de\/parallele-programmierung-ohne-spinlocks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microconsult.de\/"},{"@type":"ListItem","position":2,"name":"Parallele Programmierung ohne Spinlocks"}]},{"@type":"WebSite","@id":"https:\/\/www.microconsult.de\/#website","url":"https:\/\/www.microconsult.de\/","name":"MicroConsult Academy GmbH","description":"Professional training, consulting and project support","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microconsult.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a","name":"weissblau media","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","caption":"weissblau media"},"sameAs":["https:\/\/www.microconsult.de"]}]}},"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7887","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/comments?post=7887"}],"version-history":[{"count":6,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7887\/revisions"}],"predecessor-version":[{"id":11701,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7887\/revisions\/11701"}],"wp:attachment":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/media?parent=7887"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/categories?post=7887"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/tags?post=7887"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}