On Saturday, 16 February 2013 at 07:58:56 UTC, qznc wrote:
On Saturday, 16 February 2013 at 06:58:01 UTC, qznc wrote:
On Saturday, 16 February 2013 at 02:23:42 UTC, Jos van Uden
wrote:
On 5-2-2013 20:45, Jos van Uden wrote:
By the way, I think 'Qznc' may want to have a look at 'The
dining
philosophers':
http://rosettacode.org/wiki/Dining_philosophers
I should find the time to solve it this weekend.
Wow, my kid let me do some hacking right now and it was simpler
than expected.
Posted a solution already.
Hum...
//----
Mutex[5] forks = new Mutex();
//----
This will allocate a single Mutex, and place the same reference
in all five entries of forks.
In a word: There is actually only one fork. The philosophers can
still dine, because a single thread is allowed to lock the same
resource twice, making the problem trivial. Basically, they are
dual wielding the fork ;)
The correct line of code should be:
//----
Mutex[5] forks;
foreach(ref fork; forks) fork = new Mutex();
//----
Or some variation thereof of course. The code still works with
this change.
I'm reporting it instead of correcting it directly, so as to
better explain how and why.