Registriert seit: 16. Apr 2007
2.325 Beiträge
Turbo Delphi für Win32
|
Re: SpinLock Thread Synchronization geht nicht auf QuadCore
1. Jun 2008, 20:20
Du machst es dir deutlich zu einfach. Als einfaches Beispiel schaue man sich BeginRead an: Nimm an, ein Thread hat gerade die While-Schleife beendet, aber noch nicht das InterlockedIncrement begonnen und wird nun von einem Thread unterbrochen, der BeginWrite komplett ausführt. Nachdem der erste Thread nun BeginRead beendet, besitzen beide Threads das Lock.
Im Allgemeinen wird es nicht klappen, wenn du für den Read- und den Write-Zähler zwei verschiedene Variablen verwendest, weil du sie nicht gleichzeitig aktualisieren kannst. Du kannst stattdessen zwei Hälften eines DWords verwenden, die du dann mit InterlockedCompareExchange gleichzeitig veränderst. Der Code wird allerdings deutlich komplizierter.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
|