Geez. One copy and an indication of the 4 lines you had changed and how would have been more than enough!
The reason the modified code fails, is because it wasn't designed to be run in a loop, and you have made no changes to allow it to run in a loop.
The first problem, one of several, is that the our'd array @elevators is initialised in init_elevator() with the handles of the threads used to runs the elevators are pushed onto this array, but they are never removed. So on the second run, a second set of thread handles are push onto the array, and when finish() is called, it attempts to join to all the threads in the array, accept the handles for the first set are still there, but the associated thread are not. Then went away the first time finish() was called. So you are calling join on non-existant threads, so it blows up in your face.
It probably shouldn't blow up, but it is still programmer error. When you re-start the code, you need to ensure that all the globals, our vars, are re-set to ther initial state.
There are many other globals used. There are several other problems with the design of this program too. Not a great design, but it is meant as a demonstration of the concepts rather than working level code.
In reply to Re: Re: Re: Threads: Free to wrong pool
by BrowserUk
in thread Threads: Free to wrong pool
by P0w3rK!d
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |