Zunächst gehe ich davon aus, dass das Aufrufen einer Funktion von std :: chrono garantiert Thread-sicher ist (kein undefiniertes Verhalten oder Rassenbedingungen oder etwas Gefährliches, wenn es von verschiedenen Threads aufgerufen wird). Hab ich recht?Gibt es eine std :: chrono Thread-Sicherheitsgarantie auch bei Multicore-Kontexten?
Als nächstes, zum Beispiel on windows there is a well known problem related to multi-core processors, dass some implementations of time related systems to allow forcing a specific core to get any time information Kraft.
Was ich wissen möchte, ist:
- mit std :: Chrono, in der Norm, gibt es keine Garantie, die Art von Problem denken sollte nicht angezeigt werden?
- oder ist die Implementierung definiert
- oder gibt es eine explizite Abwesenheit der Garantie, die implizieren, dass unter Windows Sie immer Zeit immer aus dem gleichen Kern bekommen?
Das KB Artikel ein Hardwareproblem beschreibt. Es hat nichts speziell mit Windows zu tun. Das gleiche Problem tritt bei * jedem * Betriebssystem auf, das diesen Hardware-Timer verwendet. Und nein, es gibt nichts im C++ - Standard, der sagt: "Diese Klasse darf sich schlecht verhalten, wenn Sie Ihren Code auf seltener defekter Hardware ausführen". – jalf
Mein Verständnis ist, dass das Problem nur unter Windows auftritt? Wie auch immer, warum entfernst du deine Antwort? Auch das beantwortet nicht alle Punkte, die ich stelle. – Klaim
Schauen Sie sich an, was der KB-Artikel sagt: "Das Verhalten dieses Betriebssystems ist von Entwurf. Die Anpassung des Leistungszählers ist erforderlich, wenn das Betriebssystem unzuverlässige Daten vom Chipsatz erhält.". Es kann auf jedem Betriebssystem auftreten.Microsoft dokumentiert es nur, weil die Leute es oft genug dort gefunden haben, um einen KB-Artikel zu rechtfertigen (teilweise weil Windows weit verbreitet ist und teilweise weil es weit verbreitet für Spiele verwendet wird, wo hochauflösende Timer häufiger verwendet werden) – jalf