On 2009-01-09 23:14:07 -0500, dsimcha <dsim...@yahoo.com> said:

Wouldn't this also cause threading issues?

Well, I'd trust the compiler-generated code would not cause threading issues. :-)


The obvious solution would be to use TLS, but his requires duplicating the cache across threads.

Well, there isn't many choices. Either it's TLS, or the cache need to be synchronized (using either locks or lock-free algorithms; both will add some overhead anyway).

That said, if you memoize a function member of a class, the memoization data could be added to the class and not be global. If the object is not shared across threads, then the memoization data isn't either. If the object is shared, then you'd need either TLS or synchronization.


Also, using AAs internally like this would lead to very deeply hidden memory allocations, and
therefore possibly more frequent GC, etc.

Perhaps the cache needs to be a little smarter than a regular AA. You may not want to keep each and every value that was computed. Depending on the situation, keeping only the 100 last results may be enough, in which case you can dedicate a fixed amount of memory for caching.

--
Michel Fortin
michel.for...@michelf.com
http://michelf.com/

Reply via email to