[fpc-devel] TAVLTree(avl_tree.pp) thread safety, fcl-xml(DOM) is also concerned.

Burkhard Carstens fpc at bcsoft.de
Thu Aug 7 11:35:08 CEST 2008

Am Donnerstag, 7. August 2008 11:15 schrieb Burkhard Carstens:
> What about this:
> * let TAVLTree access the node manager using a local reference
>   (TAVLTree.FNodeMemManager)
> * in TAVLTree.create:
>   if IsMultiThread then
>     FNodeMemManager:=TAVLTreeNodeMemManager.create
>   else
>     FNodeMemManager:=NodeMemManager;
> * in TAVLTree.destroy:
>   if IsMultiThread then
>     FNodeMemManager.free;
> This way, nothing would change for single threaded apps but it would
> be fully threadsafe for multithreaded (AFAIKS). This is probably not
> a perfect solution, but the least intrusive one ..

This would have been too easy :-)

IsMultiThread is false until the first thread is started, so we can't 
use that. However, we could use a global var in avl_tree interface like
"var ThreadSafeAVLTree : boolean = false;" instead. This way, we don't 
have it threadsafe automatically, but if needed, the developer can set 
this to true before instantiating the first AVLTree. This is still more 
than we have now without breaking anything existing ..
A big "Note: if you want to use it in multithreaded app, please set 
ThreadSafeAVLTree:=true; before creating the first instance" in the 
docs of AVLTree and XML would be helpfull of course.


More information about the fpc-devel mailing list