Avatar billede pidgeot Nybegynder
03. februar 2006 - 18:05 Der er 2 kommentarer og
1 løsning

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.
Avatar billede pidgeot Nybegynder
04. februar 2006 - 01:32 #1
Tilsyneladende var det alligevel TCriticalSection der skulle til - jeg fatter stadig ikke helt hvorfor Mutexes ikke virker her, når nu det gør i C++ udgaven, men det vælger jeg at se bort fra.

*lukker*
Avatar billede kroning Nybegynder
04. februar 2006 - 09:27 #2
Kan vi få koden at se igen nu den virker?
Avatar billede pidgeot Nybegynder
04. februar 2006 - 12:16 #3
Jo da, uploader lige:

http://birdiesoft.dk/DiningPhilosophers.dpr - den virkende udgave, med TCriticalSection
http://birdiesoft.dk/DiningPhilosophers.old.dpr - den ikke-virkende, med mutexes (i tilfælde af nogen vil lege med det alligevel
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester