Re: Best Practices For Thread-Safe errno
On Oct 9, 9:31 am, Anders Dalvander <goo...@dalvander.com> wrote:
On Oct 8, 1:10 am, Le Chaud Lapin <jaibudu...@gmail.com> wrote:
I would like to know if there is an portable or semi-portable
equivalent of Microsoft's SetLastError():
1. Exceptions.http://en.wikipedia.org/wiki/Exception_handling
throw std::runtime_error("bad things happened")
2. Thread-Local Storage.http://en.wikipedia.org/wiki/Thread-local_storage.
__declspec(thread) int myerrno = 0;
// or __thread int myerrno = 0; in some compilers.
void seterror(int e)
{
myerrno = e;
}
int geterror()
{
return myerrno;
}
seterror(bad_things_happened);
I am responding to Alan McKenney, Daniel Kr?gler, and Anders Dalvander
here since my response is the same.
While walking in the woods, I was trying to think of a way to obviate
exceptions [since they are not in C] and thread-local storage [since a
CPU might not support multi-threading] for return error.
I realized that every stack-based machine already has "thread-local"
storage: the stack itself.
We might propose a new C/C++ keyword:
_error: "an int l-value accessible at anytime"
Each call frame would include space for _error.
When stack expands due to function-call, _error would be copied into
the correct position in the activated frame. When the stack contracts
due to function-return, _error would be copied from its position in
the deactivating frame into the corresponding position of the
activating frame.
Platforms where space/time overhead for _error is too great could have
compiler option to disable it, just as we do for exceptions, etc.
This model would be universally consistent, and would allow us to have
a portable "SetLastError()" facility while simultaneously avoiding the
overhead of a function call.
-Le Chaud Lapin-
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]