On Sat, 16 Oct 2010 10:45:49 +0200, Luca Olivetti <l...@ventoso.org> wrote:
Al 15/10/10 22:31, En/na Vinzent Höfler ha escrit:
- FreeOnTerminate should be gone, (meaning no way to actively call
TThread.Destroy from another thread, a thread gets destroyed
automatically when it leaves its execute method)
I don't agree, the creator of the thread should be able to see what's
happening to it (i.e. keeping a reference to the thread without risking
a SIGSEV because the thread has terminated).
Well, the usual implementation of an externally called "Destroy" is
- first a call to the Terminate method
- then a WaitFor()
Unfortunately WaitFor maps quite directly to pthread_join() while a
self-destruction is done by pthread_exit(). You can NOT call both
without triggering "undefined behaviour" which - beginning with some
2.6 kernel - was a segmentation fault already, and you can not call
pthread_join() from the same thread, this would deadlock.
There are several solutions to the problem, each one with its
own drawbacks. I would like to avoid additional synchronisation
requirements as well as introducing new race conditions.
With these implementation issues, implementing a race condition free
WaitFor is already hard enough, but allowing Destroy to be called
externally adds more issues than it can possibly solve.
Vinzent.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal