![]() |
AW: CriticalSections wie verwenden?
Zitat:
Das heißt es geht nicht darum, auf die selbe Resource mit verschiedenen kritischen Sektionen zuzugreifen, wie du offenbar vermutest. |
AW: CriticalSections wie verwenden?
Zitat:
Meine Delphikenntnisse sind ein wenig eingerostet, aber ich sehe in deinem Code keinen konkurrierenden Zugriff zwischen den Threads. Was willst du also beweisen? Daß dein Code sicher ist, wäre zumindest damit nicht (generell) bewiesen. Zitat:
Das was ich gesehen habe wäre aber ohnehin billiger mit Interlocked-Funktionen zu machen (zumindest bei den verwendeten Datentypen). Zitat:
Zusammenfassend: Also, es gibt nicht nur eine Queue, somit ist die Queue auch pro Thread schützbar (so wie gezeigt). |
AW: CriticalSections wie verwenden?
Zitat:
Und ich schütze mit der Thread-internen CS den Speicherbereich der Instanz und nicht von allen Instanzen, was zwar möglich ist, aber überflüssig. Stell dir vor ein Kühlschrank darf nur immer von einem geöffnet werden, weil sonst geht die Welt unter. Bei deiner Methode mit der globalen CS würde das bedeuten, dass auf der ganzen Welt niemand einen Kühlschrank öffnen darf, nur weil ich gerade meinen geöffnet habe (da hatte ich aber Glück). Und erst wenn ich die Türe schließe, darf der nächste. Wenn ich böse bin, dann pfeife ich auf die Stromkosten, bzw. melde mich bei "e wie einfach" an und lasse den Rest der Welt verdursten. Bei meiner Methode gilt das nur für den Kühlschrank, von dem ich etwas nehmen will. Alle anderen Kühlschränke interessieren mich nicht (und laut Definition auch nicht notwendig, da jeder Kühlschrank ja auch einen eigenen Speicherbereich hat, die ich nicht alle schützen muss, wenn ich meinen Kühlschrank öffne). |
AW: CriticalSections wie verwenden?
Um bei Deinem Beispiel zu bleiben
Point.x Point.y in einer CriticalSection, wenn der lesende sich nicht darum schert daß es da eine (ihm unbekannte CS) gibt liest er einfach den Wert aus , egal ob der Thread es in eine CS gepackt hat oder nicht. |
AW: CriticalSections wie verwenden?
@assabard
Delphi-Quellcode:
aber wofür benötigt er dann ene CS?
Wenn jeder Thread seine eigene Queue hat und mit der CS schützt, dann macht es schon so Sinn. Da der Zugriff über Getter/Setter stattfindet, hat alles seine Ordnung.
|
AW: CriticalSections wie verwenden?
Zitat:
|
AW: CriticalSections wie verwenden?
Zitat:
Es ist egal, ob das von einer lokalen (im Thread verankerten) oder globalen CS geschützt wird. Es muss aber geschützt werden. Aber wozu alles schützen, wenn ich genau bestimmen kann, was geschützt werden soll? (Sippenhaft und Singleton sind entweder nicht zulässig oder verpönt) :mrgreen: |
AW: CriticalSections wie verwenden?
Jepp, aber hier kommen wir wieder zu dem Punkt daß die Abfrage sich nicht für Deine lokalen CS interessiert.
wenn Du nochmals mein Beispiel aus ![]() #26 heranziehst Meine Vorstellung einer CS basiert darauf daß ein Codeabschnitt markiert Windows mitgeteilt wird. Wenn ein anderer Thread versucht diesen Codeabschnitt zu betreten wird dies nur ermöglicht wenn kein anderer Thread sich gerade darin aufhält. Wenn die Markierung jedes mal eine andere ist wie soll Windows hier eingreifen. |
AW: CriticalSections wie verwenden?
Zitat:
|
AW: CriticalSections wie verwenden?
Zitat:
In seinem Beispiel befindet sich das Feld, auf das zugegriffen wird, innerhalb des Threads. Und es wird ausschließlich über die kritische Sektion genau dieses Threads zugegriffen. Und eben nicht durch verschiedene Threads und mehrere Sektionen. Denn beim Zugreifen verwendet auch der andere Thread die kritische Sektion des Zielthreads und nicht seine eigene. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz