- A Concurrent Affair - https://www.concurrentaffair.org -

When a Thread Terminates

I’m still dealing with this deadlock problem. In some cases, the following might happen: Thread 1 enters compactWait, but finds out thread 2 is waiting for this synchronization point. Thread 2 wakes thread 1 up and waits for the next synchronization point. Thread 1 terminates, and thread 2 never gets woken up.

What I should try is insert a call to compactWait (or some other method, maybe compactEndThread) at the very end of java.lang.Thread.exit. I’m hoping that this will actually be at the end of a thread’s life, and there won’t be any more sync points afterwards. Otherwise, this is not going to work.

This call will check if there is a thread waiting to be woken up at the current index, and if so, wake it up. Otherwise, it’s a no-op, because there should be a thread running already, about to enter compactWait and execute.

If this doesn’t work, e.g. because there are still sync points happening after java.lang.Thread.exit, then I could try some kind of “counting scheme”. I count the number of threads alive and how many of them are currently waiting. If the second number ever becomes equal to the first number, I’d have to wake a thread up. But that seems more complicated right now.

I don’t feel too well right now – felt awful yesterday, too – but I have a date. Time for dinner and a movie.

[1] [2]Share [3]