Mutexes virker tilsyneladende ikke!?
Jeg har i forbindelse med en opgave i skolen for nyligt lavet en løsning på Dining Philosophers-problemet (http://en.wikipedia.org/wiki/Dining_Philosophers) i C# - den har jeg så porteret til Java og C++ for at få lidt erfaring, og nu vil jeg endelig lave den i Delphi.Hovedparten virker efter planen, men jeg har et problem med at holde styr på hvilke gafler der er taget - jeg har givet hver gaffel en Mutex, som jeg tilegner mig når den bliver samlet op - dette burde virke uden problemer, da jeg bruger samme princip i C++ udgaven uden problemer.
Alligevel sker det at en gaffel bliver samlet op før den er lagt tilbage, og jeg fatter ikke hvorfor:
Philosopher #3 getting first fork... //Fork2
Philosopher #3 got first fork.
Philosopher #4 getting first fork... //Fork3
Philosopher #4 got first fork.
Philosopher #5 getting first fork... //Fork0
Philosopher #5 got first fork.
Philosopher #3 getting second fork... //Fork3
Philosopher #3 got second fork.
Philosopher #4 getting second fork... //Fork4
Philosopher #4 got second fork.
Jeg har overvejet at bruge en TCriticalSection i stedet, men som jeg forstår det vil det forhindre at to kan spise samtidigt, selvom det principielt godt kunne lade sig gøre.
Koden kan ses på http://birdiesoft.dk/DiningPhilosophers.dpr. I er selvfølgelig velkomne til at spørge hvis der er noget I ikke forstår.