__thread keyword is simple to use, but I have to open one socket per thread, so I used pthread_once and also pthread_key_create to close it. The only disadvantage I noticed is running pthread_once in every access handler callback call. I don't know the details, but pthread_once should be fast enough to discard my code, isn't it?
Best, Carlos Eduardo On Thu, Jul 3, 2014 at 5:05 AM, Christian Grothoff <[email protected]> wrote: > Well, pthread_key_create() also works, I guess, but I was thinking about > a slightly more lightweight method: > > http://gcc.gnu.org/onlinedocs/gcc-3.3/gcc/Thread-Local.html > > But both should work, and the best choice may really depend on your > application and its intended environment. > > > Happy hacking! > > Christian > > On 07/03/2014 09:58 AM, Carlos Eduardo Moreira dos Santos wrote: > > I googled and found pthread_key_create(). Is that what you meant? I'm > > glad to know I don't need to maintain a fork :). Thank you. > > > > > > On Tue, Jul 1, 2014 at 1:38 AM, Christian Grothoff <[email protected] > > <mailto:[email protected]>> wrote: > > > > On 06/30/2014 06:30 PM, Carlos Eduardo Moreira dos Santos wrote: > > > Hi, > > > > > > I'm using zeromq between a request and a response. Its socket is > not > > > thread-safe and that's one of the reasons I chose > > MHD_USE_SELECT_INTERNALLY. > > > As I am also using a thread pool, I have different sockets for > > each thread. > > > It is expensive to open and close a socket in every connection and > > I would > > > like to share a socket between all same-thread connections. I > > didn't find a > > > way to do it, so I made a small change in the code > > > > > < > https://github.com/cemsbr/libmicrohttpd/commit/3151eff47553a8a93db7fb3355366b31aed2b262 > > > > > in order to get the thread number (starting from 0) from the > > connection > > > daemon. Thus, I can initialize an array of sockets only once (in > > the main > > > function) and have them indexed by the thread number to be > > accessed later. > > > > > > As a side effect, I have to include internal.h, but it is working > as > > > expected. Was there a better way of doing this that I haven't > noticed? > > > > You might want to just use a thread-local variable to hold your > > connection. > > > > My 1 cent ;-). > > > > Christian > > > > >
