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.