Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"

RE: RE: RE: RE: RE: Flock Subroutine

by KM (Priest)
on Aug 08, 2000 at 17:29 UTC ( [id://26780]=note: print w/replies, xml ) Need Help??

in reply to RE: RE: RE: RE: Flock Subroutine
in thread Flock Subroutine

Sure, there are flows which are less likely to cause a race condition. But, I am a realist and know many novice programmers can't see a race condition if they are staring at it, and semaphore files take the race out of the condition (sorry, it is bad pun day). Not all processes want to open files for read/write. Some may want only append, or only clobber. By using semaphores, you can avoid trying to have to figure out if you are making a race condition (or worse, finding out the hard way). I prefer the offensive mode of programming when any type of security issue may be involved, such as file locking and race conditions. You see code put on this site where race conditions would happen, so you can see many people do not think of it or recognize it. To each his/her own, but I know my files won't be currupt with semaphores :)


Replies are listed 'Best First'.
RE: RE: RE: RE: RE: RE: Flock Subroutine
by tilly (Archbishop) on Aug 08, 2000 at 18:17 UTC
    Many experienced programmers do not understand races either. For instance every select() loop has a race condition - between you being notified and you trying to respond, the data may have gone. Early versions of Apache suffered from this problem, one request could tie up several children.

    A related bug warning. The examples in the documentation and in the Perl Cookbook of using flock with DB_File are not safe. It was discovered last fall that the first page of the database is read before you have a chance of locking the dbm, and in some cases BerkeleyDB will close and reopen the file behind your back.

      This is why good ole whiteboards and a bunch of cow orkers are helpful. Knowing flow, seeing possible conditions, and knowing tidbits about software. Of course, using a semaphore file should solve these issues, since you take the actual locking piece away from the wanted data set. For example, if you lock a semaphore before opening the DBM, the DBM can close and reopen all it wants, since the semaphore is the lock.


Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://26780]
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (2)
As of 2024-06-20 04:53 GMT
Find Nodes?
    Voting Booth?

    No recent polls found

    erzuuli‥ 🛈The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.