Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.os.linux.development.apps > #421
| From | Bill M <wpmccormick@just_about_everywhere.com> |
|---|---|
| Newsgroups | comp.os.linux.development.apps |
| Subject | Re: object file memory |
| Date | 2012-02-07 11:21 -0600 |
| Organization | A noiseless patient Spider |
| Message-ID | <jgrmj8$6pc$1@dont-email.me> (permalink) |
| References | <jgpkvf$c83$1@dont-email.me> <20120207000059.76@kylheku.com> <jgrc5t$5f0$1@dont-email.me> |
Bill M wrote, On 2/7/2012 8:23 AM: > Kaz Kylheku wrote, On 2/6/2012 5:07 PM: >> On 2012-02-06, Bill M<wpmccormick@just_about_everywhere.com> wrote: >>> I have an object file foo.o that I want to link to an executable. The >>> main executable creates a number of child threads that use code and >>> variables from foo.o. >> >> Do you have the source code for foo.o that you can tweak and recompile? > Yes >> >>> I've included a very simplistic representation at >>> the end. My question is, how can each child thread (worker) get it's own >>> private copy of global variables foo_char and foo_int? Or does that just >>> happen auto-magically? >> >> Why would that happen automagically? It's completely the wrong thing >> which >> would break most programs. >> >>> ** foo.c ** >>> char foo_char; >>> int foo_int; >> >> These are static variables, which are understood to be single-instance, >> and any correct program relies on them being that way. Automagically >> making >> these thread-local would be broken behavior. >> >> GCC has extensions for declaring statics thread local. Check the GCC >> documentation for the setion on "Thread-Local Storage", but the gist >> of it is: >> >> __thread char foo_char; >> >> There is also an explicit POSIX API for managing thread-specific values >> accessed by keys: pthread_key_create, pthread_setspecific, etc. > > So I just started reading about keys (after my original post here) and I > was hoping for something even easier. The GCC thread local extensions > seem pretty simple to implement. I give that a try first. > So after getting the GCC extensions to compile, they appears not work. I have a global declared as follows: __thread OCX_COMM_STATE comm_state = OCX_COMM_START; OCX_COMM_STATE is a typedef'd enum. So then, in a function called from the main program comm_state = OCX_COMM_SEND; But it seems not to change. Any thoughts? Did I miss something? Thanks!!
Back to comp.os.linux.development.apps | Previous | Next — Previous in thread | Next in thread | Find similar
object file memory Bill M <wpmccormick@just_about_everywhere.com> - 2012-02-06 16:41 -0600
Re: object file memory Kaz Kylheku <kaz@kylheku.com> - 2012-02-06 23:07 +0000
Re: object file memory Bill M <wpmccormick@just_about_everywhere.com> - 2012-02-07 08:23 -0600
Re: object file memory Bill M <wpmccormick@just_about_everywhere.com> - 2012-02-07 08:40 -0600
Re: object file memory Bill M <wpmccormick@just_about_everywhere.com> - 2012-02-07 08:58 -0600
Re: object file memory Bill M <wpmccormick@just_about_everywhere.com> - 2012-02-07 11:21 -0600
Re: object file memory "Ersek, Laszlo" <lacos@caesar.elte.hu> - 2012-02-07 22:09 +0100
Re: object file memory Bill M <wpmccormick@just_about_everywhere.com> - 2012-02-07 16:08 -0600
Re: object file memory Bill M <wpmccormick@just_about_everywhere.com> - 2012-02-08 20:42 -0600
Re: object file memory Rainer Weikusat <rweikusat@mssgmbh.com> - 2012-02-09 19:00 +0000
Re: object file memory Joe Beanfish <joe@nospam.duh> - 2012-02-09 11:15 -0500
csiph-web