Re: [APC-DEV] atomaticity/thread safeness of apc shared memory functions+mutexes

[email protected] (Exception e) Thu, 25 Dec 2008 12:35:40 +0100
Newsgroups php.apc.dev
Message-ID <[email protected]>
Rasmus Lerdorf schreef:
> Exception e wrote:
>> Rasmus Lerdorf schreef:
>>
>>> Yes, they are atomic and they are locked appropriately.  You don't need
>>> any sort of mutex.  This is shared memory.  Generally we don't suggest
>>> running PHP in any sort of threaded environment though.
>> To respond to your last remark: php processes can be exectuted in
>> parallel by Apache—at least this is my understanding. So if I need to
>> work with multiple shared memory entries per request i still need
>> mutexes in order to lock concurrent access to these pieces.
> 
> That's not multi-threading, that is multi-processing, and of course APC
> handles that correctly and locks appropriately.  Multi-threading is when
> you have multiple threads of execution within the same process.
> 


Yes, but do you mean that all shared memory entries are blocked for the 
duration of a process? Let's give me an example

<?php

$val1 = apc_fetch('val1');

// (#1) different process does: apc_store('val1', 34);

$val2 = apc_fetch('val2');

echo $val1 + $val2;

?>


 From what I understand is that when the same code runs in a different 
process, the shared memory segment 'val1' can be changed on (#1) by that 
other process. So in fact I need two mutexes.

But if all shared memory is locked for each process, than such a 
situation cannot happen. Did you really mean that? I hope you could 
clarify this.