D - Thread Specific Storage
- Michael Lindner (8/8) Aug 16 2001 I always thought a nice feature missing from C/C++ was a storage class
- Matthew Versluys (7/15) Aug 17 2001 Microsoft has an extension which does this in C++
- Christophe de Dinechin (39/56) Aug 17 2001 Look at the LX thread. To me, that's an instance of the general class of
I always thought a nice feature missing from C/C++ was a storage class for thread specific storage. For instance: perthread int x; would declare an int that had a unique instance in every thread created. Very easy to implement (just reserve space on the thread's stack before jumping to the thread's function), but nobody's miplemented it - the only thread-specific storage interface is the ugly POSIX thing with unique keys and all sorts of lookups.
Aug 16 2001
Microsoft has an extension which does this in C++ __declspec(thread) as well as an API for Thread Local Storage. Cheers, Matt. "Michael Lindner" <mikell optonline.net> wrote in message news:3B7C8487.89994CFC optonline.net...I always thought a nice feature missing from C/C++ was a storage class for thread specific storage. For instance: perthread int x; would declare an int that had a unique instance in every thread created. Very easy to implement (just reserve space on the thread's stack before jumping to the thread's function), but nobody's miplemented it - the only thread-specific storage interface is the ugly POSIX thing with unique keys and all sorts of lookups.
Aug 17 2001
Look at the LX thread. To me, that's an instance of the general class of "pragmas". In LX: {thread_specific} int X There are so many such cases that you don't want it to be part of the language. To wit, LX language-defined pragmas exist for: linkage (Asm, C, etc) argument passing conventions size and bit size (of fields in structs) address of object, or offset in struct alignment width of memory accesses (*see note 1*) memory space for accessing an entitty (I/O, data, for a MC68000, 16, 24 or 32-bit space, etc) inlining (specified either at declaration site or call site) thread-specific storage synchronous access in multi-threaded environments symbol to be exported or imported from a DLL near or far pointers structure packing optimization levels Whether arguments are passed by value or by reference Whether a value has to live in a register, and optionally, in which register Linkage sections (.text, .data, .init_text, etc) Whether an object is used only at initialization or only at exit time And I'm probably forgetting a few. The important point is: the general syntax and framework allows this list to be extended as needs to be. (*note 1*) As a programmer of real time systems, I once ran accross the following interesting problem. Assume ptr is a pointer to a volatile 16-bit int, I was doing: *ptr |= 8 The Microsoft compiler decided: well, 8 fits on 8 bits, right, so I can go ahead and do a 8-bit OR. Too bad, ptr was pointing to some VME-bus bridge that took 16-bit accesses and byte-swapped them for me (VME being good-endian, while x86 is bad-endian). The byte-swapping hardware did not trigger on the 8-bit access, and I ended up flipping the wrong bit. Talk about a pain to debug ;-) Christophe Matthew Versluys wrote:Microsoft has an extension which does this in C++ __declspec(thread) as well as an API for Thread Local Storage. Cheers, Matt. "Michael Lindner" <mikell optonline.net> wrote in message news:3B7C8487.89994CFC optonline.net...I always thought a nice feature missing from C/C++ was a storage class for thread specific storage. For instance: perthread int x; would declare an int that had a unique instance in every thread created. Very easy to implement (just reserve space on the thread's stack before jumping to the thread's function), but nobody's miplemented it - the only thread-specific storage interface is the ugly POSIX thing with unique keys and all sorts of lookups.
Aug 17 2001