On 14/06/07, Dmytro Fedonin <[EMAIL PROTECTED]> wrote:
Hi all,

Looking through 'server/mpm/worker/worker.c' I have found such a
combination of TODO/FIXME comments:
1)
/* TODO: requests_this_child should be synchronized - aaron */
if (requests_this_child <= 0) {
2)
requests_this_child--; /* FIXME: should be synchronized - aaron */

And I can not see any point here. These are one word CPU operations,
thus there is no way to preempt inside this kind of operation. So, one
CPU is safe by nature of basic operation. If we have several CPUs they
will synchronize caches any way, thus we will never get inconsistent
state here. We can only lose time trying to synchronize it in code. Am I
not right?

The decrement operation may be handled as load, decrement, store on
some architectures, so can be pre-empted by a different CPU.

Also some hardware architectures (e.g. HP Alpha) have an unusual
memory model. One CPU may see memory updates in a different order from
another CPU. Software that relies on the updates being seen across all
CPUs must use the appropriate memory synchronisation instructions.

I don't know if these considerations apply to this code.

PS My assumptions are several threads of the same process are dealing
with one word of common memory.

--
Best regards,
Dmytro

Reply via email to