[M3devel] Per thread data

Darko darko at darko.org
Tue Sep 14 07:08:14 CEST 2010


I have lots of objects that are implemented on the basis that no calls on them can be re-entered, which also avoids the need for locking them in a threaded environment, which is impractical. The result is that I need one copy of each object in each thread. There is approximately one allocated object per object type so space is not a big issue. I'm looking at a small number of threads, probably maximum two per processor core. With modern processors I'm assuming that a linear search through a small array is actually quicker that a hash table.

On 13/09/2010, at 9:55 PM, Mika Nystrom wrote:

> Darko writes:
>> I need to have certain data structures allocated on a per thread basis. =
>> Right now I'm thinking of using the thread id from ThreadF.MyId() to =
>> index a list. Is there a better, more portable way of allocating on a =
>> per-thread basis?
>> 
>> Cheers,
>> Darko.
> 
> In my experience what you suggest works just fine (remember to lock the
> doors, though!)  But you can get disappointing performance on some thread
> implementations (ones that involve switching into supervisor mode more
> than necessary when accessing pthread structures).
> 
> Generally speaking I avoid needing per-thread structures as much as possible
> and instead put what you need in the Closure and then pass pointers around.
> Of course you can mix the methods for a compromise between speed and
> cluttered code...
> 
> I think what you want is also not a list but a Table.
> 
>      Mika




More information about the M3devel mailing list