I mean, I appreciate the concept of what she's doing here, but that self-assessment sounds reasonable to me.
I mean, I appreciate the concept of what she's doing here, but that self-assessment sounds reasonable to me.
There's a variable outside of the functions scope. If the value of the global variable were changed before it's referenced in the function the outcome would change.
int global_int;
int is_not_reentrant(int x) {
int x = x; // An arbitrary operation
return global_int + x; // the result depends on global_int
}
In the second, the value of the global_int is copied into a variable within the function; so the result is no longer dependent on anything outside of the function's scope. My thinking was, that this demonstrated reentrancy. int global_int;
int is_reentrant(int x) {
int saved = global_int;
return saved + x;
}
From the looks of it I did make a mistake, since it seems to be missing one of these criteria. I'll modify the snippets to fix it. Thanks! :) +Must hold no static (or global) non-constant data.
+Must not return the address to static (or global) non- constant data.
-Must work only on the data provided to it by the caller.
+Must not rely on locks to singleton resources.
+Must not modify its own code (unless executing in its own unique thread storage)
+Must not call non-reentrant computer programs or routines.Also, it's important to think about the kinds of program transformations that the C compiler is free to do with your code when going from C to assembly. I think it's likely that your compiler would produce the same output for both functions. Lines of C code do not execute atomically, and instructions can be re-ordered.
EDIT: Returning to this because I think I made a mistake. "Two calls executing concurrently" is not exactly right, because it admits the possibility of arbitrary instruction interleaving. A reentrant function must be able to be paused at any point, have another call to the function execute entirely, and then resume correctly. This is a weaker condition.
I would use "realistic", as opposed to "reasonable", look hard enough and you will see that everyone has gaps in their knowledge.
I have no idea what your agenda is in lavishing all this unnecessary praise on Morgan Phillips, but it's gross. Please stop.
Is your name Linus Torvalds by any chance?