On Sun, 2007-10-21 at 20:16 +0400, Tomash Brechko wrote:

> But if C99 is thread-neutral, then it's compiler's responsibility to
> ensure the same result as some abstract machine 

No. The compiler is responsible for ensuring that things work
if, and only if:

1. your program conforms in required ways 

2. you only call functions in the standard library
   or functions you define in your program

Therefore, when making calls to ANY external library,
all bets are off UNLESS that library also meets the above
conditions.

Interfacing the operating system in any way OTHER than
the C standard library functions immediately relieves
the compiler of all responsibility -- and that includes
calls to Posix functions which are not implemented
entirely in Standard C.

Of course, a C compiler may make additional guarantees,
for example, Posix compliance, but then you must check
the Posix standard to see what additional things it 
promises.

AFAIK, access to a shared variable is sound if serialised
by a mutex. However that isn't a proper description,
there are situations where you can safely read a shared
variable without a lock being held, for example if you know
another thread has not modified it since the last synchronisation.


-- 
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net

Reply via email to