Boost logo

Boost :

Subject: [boost] thread_specific_ptr prototype (was: Re: [thread] thread_specific_ptr performance)
From: Stefan Strasser (strasser_at_[hidden])
Date: 2010-01-13 09:08:29


Am Tuesday 12 January 2010 21:39:16 schrieb vicente.botet:
> In order to follow the discussion do you agree to post a clear proposal
> using your pages design?

the "pages" proposal was a result of our misunderstanding, I think a
vector-based implementation is sufficient.

here's a prototype implementation:
http://www.boostpro.com/vault/index.php?action=downloadfile&filename=tss.hpp&directory=&

it implements all functions of a thread_specific_ptr except for custom cleanup
functions (for now).

below is the result of operator*.

thread_specific_ptr time complexities:

constructor: constant
destructor: constant average, occasional vector reallocation
operator*: constant
operator->: constant
release(): constant
get(): constant
reset(): undefined. operations by the tss code itself are constant average,
but it may call a user-supplied destructor or pthread functions.

it also fixes the bug I posted in a previous mail.

<<
prototype::thread_specific_ptr<int> ptr;
int f(){
  return *ptr;
}
>>

<<
_Z1fv:
.LFB4216:
        pushl %ebp
.LCFI26:
        movl %gs:_ZN5boost9prototype6detail10tss_vectorE_at_NTPOFF, %edx
        movl ptr+4, %eax
        movl %esp, %ebp
.LCFI27:
        popl %ebp
        movl (%edx), %edx
        leal (%eax,%eax,2), %eax
        movl (%edx,%eax,4), %eax
        movl (%eax), %eax
        ret
>>


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk