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.

Reply via email to