{"id":207035,"date":"2018-07-29T01:00:00","date_gmt":"2018-07-28T23:00:00","guid":{"rendered":"https:\/\/www.borncity.com\/blog\/?p=207035"},"modified":"2018-08-10T21:45:26","modified_gmt":"2018-08-10T19:45:26","slug":"was-ist-eigentlich-eine-race-condition","status":"publish","type":"post","link":"https:\/\/borncity.com\/blog\/2018\/07\/29\/was-ist-eigentlich-eine-race-condition\/","title":{"rendered":"Was ist eigentlich eine Race Condition?"},"content":{"rendered":"<p>[<a href=\"https:\/\/borncity.com\/win\/2018\/07\/29\/what-is-a-race-condition\/\" target=\"_blank\" rel=\"noopener\">English<\/a>]Heute mal ein Beitrag zu einem allgemeinen Thema. Es geht um die Frage, was eine Race Condition ist. Dieser Begriff wird dem einen oder anderen Blog-Leser beim Lesen von Update-Problemen vielleicht untergekommen bzw. aufgefallen sein.<\/p>\n<p><!--more--><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/ssl-vg03.met.vgwort.de\/na\/b6632a4b37444c118abec25e97b48de1\" alt=\"\" width=\"1\" height=\"1\" \/>Beispielsweise wird im Blog-Beitrag <a href=\"https:\/\/borncity.com\/blog\/2018\/07\/20\/windows-server-2016-hohe-cpu-last-mit-update-kb4345418-kb4054566\/\">Windows Server 2012 R2 und 2016: Hohe CPU-Last mit Update KB4345418 \/ KB4054566<\/a> dieser Terminus benutzt:<\/p>\n<blockquote><p>Addresses an issue that may cause some devices running network monitoring workloads to receive the 0xD1 Stop error because of a <strong>race condition<\/strong> after installing the July update.<\/p><\/blockquote>\n<p>Auch im Blog-Beitrag <a href=\"https:\/\/borncity.com\/blog\/2018\/06\/22\/windows-10-v1607-v1709-updates-vom-21-juni-2018\/\">Windows 10 V1607-V1709: Updates vom 21. Juni 2018<\/a> kommt der Begriff in Verbindung mit einem Problem vor:<\/p>\n<blockquote><p>Addresses an issue where Windows Defender Security Center and the Firewall Pillar app stop working when opened. This is caused by a race condition that occurs if third-party antivirus software has been installed.<\/p><\/blockquote>\n<p>Im Artikel <a href=\"https:\/\/borncity.com\/blog\/2018\/03\/24\/windows-7-update-kb4088881-preview-rollup-23-3-2018\/\" target=\"_blank\" rel=\"noopener\">Windows 7: Update KB4088881 (Preview Rollup, 23.3.2018)<\/a> betrifft es die Universal C Runtime (CRT) beim Updaten diverser Komponenten.<\/p>\n<blockquote><p>Addresses issue with a race condition in the Universal C Runtime (CRT) that occurs when you update the global locale. The issue corrupts the current locale reference count and triggers a double free condition.<\/p><\/blockquote>\n<p>Scheint also nicht so selten zu sein und kann faktisch in allen Windows-Versionen, aber auch unter macOS oder Linux auftreten.<\/p>\n<h2>Race Condition, dass steckt dahinter<\/h2>\n<p>Von der \u00dcbersetzung her handelt es sich um eine Bedingung beim Rennen. Die Wikipedia <a href=\"https:\/\/de.wikipedia.org\/wiki\/Race_Condition\" target=\"_blank\" rel=\"noopener\">wei\u00df<\/a> dazu mehr:<\/p>\n<blockquote><p>Ein <b>kritischer Wettlauf<\/b>, auch <b>Wettlaufsituation<\/b> (englisch race condition oder <i>race hazard<\/i>) ist in der Programmierung eine Konstellation, in der das Ergebnis einer Operation vom zeitlichen Verhalten bestimmter Einzeloperationen abh\u00e4ngt. Der Begriff stammt von der Vorstellung, dass zwei Signale wettlaufen, um die Ausgabe als erstes zu beeinflussen. Im Allgemeinen ist die M\u00f6glichkeit zu vermeiden, dass eine Race Condition entsteht.<\/p>\n<p>Unbeabsichtigte Wettlaufsituationen sind ein h\u00e4ufiger Grund f\u00fcr schwer auffindbare Programmfehler; bezeichnend f\u00fcr solche Situationen ist n\u00e4mlich, dass bereits die ver\u00e4nderten Bedingungen zum Programmtest, wie zus\u00e4tzliches Logging oder Debug-Modus, zu einem v\u00f6lligen Verschwinden der Symptome f\u00fchren k\u00f6nnen. Zur Vermeidung solcher Konstellationen k\u00f6nnen bei der Programmerstellung beispielsweise Semaphore eingesetzt werden.<\/p><\/blockquote>\n<p>Es handelt sich um eine beim Programmablauf auftretende, kritische Wettlaufsituation um den Zugriff auf eine Ressource oder Operation, die von zwei Threads unternommen wird. Eine der beiden Threads gewinnt und bekommt den Zugriff. Der unterlegene Thread f\u00fchrt den Zugriff sp\u00e4ter aus, was aber unerw\u00fcnschte Folgen haben kann. Im Wikipedia-Artikel ist ein Beispiel f\u00fcr den Zugriff auf eine Speichervariable mit einem Z\u00e4hler genannt.<\/p>\n<p>Microsoft hat den KB-Artikel <a href=\"https:\/\/support.microsoft.com\/en-us\/help\/317723\/description-of-race-conditions-and-deadlocks\" target=\"_blank\" rel=\"noopener\">317723<\/a> Description of race conditions and deadlocks zum Thema, aber mit dem Fokus Visual Basic 2003 und VB .NET 2003, ver\u00f6ffentlicht. Dort geht es um den Zugriff auf eine Shared-Variable durch zwei konkurrierende Threads. Die Race Condition f\u00fchrt dazu, dass unvorhersagbare Ergebnisse auftreten.<\/p>\n<h2>Ein Beispiel von M\u00e4rz 2018<\/h2>\n<p>Susan Bradley hat das Ganze im M\u00e4rz 2018, damals aus aktuellem Anlass (<a href=\"https:\/\/support.microsoft.com\/en-us\/help\/4075150\/how-to-recover-devices-from-an-unbootable-state-after-installing-the-j\" target=\"_blank\" rel=\"noopener\">KB4075150<\/a> endet mit nicht bootenden Maschinen, auf Grund einer Race Condition), bei askwoody.com <a href=\"https:\/\/www.askwoody.com\/2018\/patch-lady-what-is-a-race-condition\/\" target=\"_blank\" rel=\"noopener\">angesprochen<\/a>. Die Erkl\u00e4rung Microsofts zum Problem<\/p>\n<blockquote><p>This issue occurs in the unlikely event, due to a <strong>race condition<\/strong>, that the Windows Update servicing stack incorrectly skips installing the newer version of some critical drivers in the cumulative update and uninstalls the currently active drivers during maintenance.<\/p><\/blockquote>\n<p>Dort wurde ein Treiber erfolgreich deinstalliert (die Transaktion war also erfolgreich). Aber der neue Treiber wurde auf Grund einer Race Condition (da bleibt MS nebul\u00f6s, muss man wohl als einen Bug bezeichnen) nicht installiert. Da es sich bei <em>acip.sys<\/em> um einen kritischen Treiber, der beim Booten ben\u00f6tigt wird, handelte, konnten die Maschinen nicht starten. Susan Bradley geht im oben verlinkten Beitrag bei askwoody.com auf die Details ein und berichtet, dass bei dism-Deinstallations-Versuchen genau nur ein 'Schuss' frei war, um das Treiber-Rollback anzusto\u00dfen.<\/p>\n<p><strong>Erg\u00e4nzung:<\/strong> Im englischsprachigen Blog-Beitrag ist <a href=\"https:\/\/borncity.com\/win\/2018\/07\/29\/what-is-a-race-condition\/#comment-3486\" target=\"_blank\" rel=\"noopener\">dieser Kommentar<\/a>\u00a0mit interessanten Erg\u00e4nzungen und Beobachtungen von\u00a0Crysta T Lacey eingetroffen. Der Kommentar legt auch offen, warum es inzwischen so wichtig ist, Servicing Stack Updates (SSUs) vor den eigentlichen Updates zu installieren.<\/p>\n<p><strong>\u00c4hnliche Artikel:<\/strong><br \/>\n<a href=\"https:\/\/borncity.com\/blog\/2018\/07\/27\/windows-10-sleep-study-infos-und-probleme\/\">Windows 10: Sleep Study, Infos und Probleme<\/a><br \/>\n<a href=\"https:\/\/borncity.com\/blog\/2017\/05\/06\/dynamische-updates-fr-windows-das-steckt-dahinter\/\">Dynamische Updates f\u00fcr Windows, das steckt dahinter<\/a><br \/>\n<a href=\"https:\/\/borncity.com\/blog\/2017\/01\/26\/windows-10-programme-als-system-ausfhren\/\">Windows 10: Programmausf\u00fchrung als System\/TrustedInstaller<\/a><br \/>\n<a href=\"https:\/\/borncity.com\/blog\/2016\/08\/04\/windows-10-schnellstart-abschalten\/\">Windows 10: Schnellstart abschalten<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>[English]Heute mal ein Beitrag zu einem allgemeinen Thema. Es geht um die Frage, was eine Race Condition ist. Dieser Begriff wird dem einen oder anderen Blog-Leser beim Lesen von Update-Problemen vielleicht untergekommen bzw. aufgefallen sein.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[4293],"class_list":["post-207035","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-allgemein"],"_links":{"self":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/posts\/207035","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/comments?post=207035"}],"version-history":[{"count":0,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/posts\/207035\/revisions"}],"wp:attachment":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/media?parent=207035"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/categories?post=207035"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/tags?post=207035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}