http://qs321.pair.com?node_id=410014


in reply to Using clone/dclone with threads

I'll explain why I was trying to make local copies.

Basically, I've got an HoHoH which contains lots of records, unique key at top-level, so each record appears once & only once in the struct.
There are multiple threads processing these records, but at any given time a given record will only be being processed by exactly 1 thread, except when I need to pass a record to another thread, which is rare.

Having read the Perl docs etc, it seems that
1. you can only lock the entire HoHoH, not sub-levels
2. you have to lock the entire HoHoH to make an update

For me, the records will be being updated frequently, but as I say, there will be no clash of trying to update the same record from 2 different threads. If I have to lock the HoHoH for each update, it'll bottleneck badly.
OTOH, if non-clashing updates are safe without locking, that would be great.

Replies are listed 'Best First'.
Re^2: Using clone/dclone with threads
by Anonymous Monk on Nov 23, 2004 at 23:50 UTC
    Replying to myself: Actually, having just re-read perlthrtut, I noticed this one line in the middle:

    Note that a shared variable guarantees that if two or more threads try to modify it at the same time, the internal state of the variable will not become corrupted. However, there are no guarantees beyond this, as explained in the next section.

    The thing I'm still worried about is whether this applies completely to multi-level struct like my HoHoH, as BrowserUK and I have discussed limitations on this in another thread recently.