You will have to use a thread-local store construct for this. This has 
definitely come up before and I'm pretty sure there are some patches out there 
for it, in one capacity or another.

If your buffers are of a fixed, reasonable size, I'd recommend just sticking 
them on the stack (as local variables in the handler method) -- though it 
sounds from your message like this is not the case and you want to avoid 
allocations.

If writes to your buffer are rare, a read-write lock might suffice. Otherwise, 
I'd probably take a look at boost's TLS mechanism: 
http://www.boost.org/doc/libs/1_39_0/doc/html/thread/thread_local_storage.html

I haven't been working at this level of C++ for quite a while, someone else on 
the list probably has better recommendation. As far as I'm aware, we don't have 
an API for this in the Thrift library itself.

Any other opinions here?

Cheers,
mcslee

-----Original Message-----
From: Michi Mutsuzaki [mailto:[email protected]] 
Sent: Friday, November 05, 2010 5:25 PM
To: [email protected]
Subject: Re: TThreadPoolServer thread safety

Thank you for your reply, Mark.

Is there a way to have per-thread data? For example, can I allocate a buffer
for each thread in the threadpool? Otherwise, each thread needs to
allocate/deallocate a buffer in the handler function for each request.

Thanks!
--Michi

On 11/5/10 4:16 PM, "Mark Slee" <[email protected]> wrote:

> TThreadPoolServer is *not* thread-safe. The threads it creates are not
> synchronized in any way.
> 
> You must implement thread-safety yourself if you are sharing any data across
> request handlers.
> 
> -----Original Message-----
> From: Michi Mutsuzaki [mailto:[email protected]]
> Sent: Friday, November 05, 2010 3:52 PM
> To: [email protected]
> Subject: TThreadPoolServer thread safety
> 
> Hi,
> 
> I'm using TThreadPoolServer with C++. Does my handler need to be
> thread-safe? More specifically, my handler has a static member, and I'm
> wondering if I need to protect it using a mutex.
> 
> Thanks!
> --Michi
> 
> 

Reply via email to