Thread

  1. nonblocking lock?

    Pablo Funes <pablo@cs.brandeis.edu> — 1999-05-27T22:42:11Z

    Is it possible to do a nonblocking lock? That is, 
    I want several clients to execute,
    
        begin
        if table A is locked
        then
            go around doing stuff on other tables
        else
            lock A and do stuff on A
        endif
    
    the problem is, if I use normal lock, then 
    after one client has locked and is doing stuff on A
    the other one will block and thus it won't be able
    to go around doing stuff on other tables. Is it
    possible to do a nonblocking lock that will just
    fail if the table is locked already? 
    
    
    NOTE: I tried using PQrequestCancel but it won't
    cancel the request. It still blocks for as long
    as the lock lasts. The only way around I've found so 
    far is to use PQreset. That's crude but works. But 
    it leaves a dangling postmaster process that lives
    until the orignal lock is freed. Any other ideas? 
    
    Thanks a lot 
    
    Pablo Funes
    Brandeis University
    pablo@cs.brandeis.edu
    
    
  2. Re: [HACKERS] nonblocking lock?

    Massimo Dal Zotto <dz@cs.unitn.it> — 1999-06-02T10:23:47Z

    > Is it possible to do a nonblocking lock? That is, 
    > I want several clients to execute,
    > 
    >     begin
    >     if table A is locked
    >     then
    >         go around doing stuff on other tables
    >     else
    >         lock A and do stuff on A
    >     endif
    > 
    > the problem is, if I use normal lock, then 
    > after one client has locked and is doing stuff on A
    > the other one will block and thus it won't be able
    > to go around doing stuff on other tables. Is it
    > possible to do a nonblocking lock that will just
    > fail if the table is locked already? 
    
    Try with user locks. You can find the code in contrib/userlocks.
    
    -- 
    Massimo Dal Zotto
    
    +----------------------------------------------------------------------+
    |  Massimo Dal Zotto               email: dz@cs.unitn.it               |
    |  Via Marconi, 141                phone: ++39-0461534251              |
    |  38057 Pergine Valsugana (TN)      www: http://www.cs.unitn.it/~dz/  |
    |  Italy                             pgp: finger dz@tango.cs.unitn.it  |
    +----------------------------------------------------------------------+
    
    
  3. Re: [HACKERS] nonblocking lock?

    Bruce Momjian <maillist@candle.pha.pa.us> — 1999-06-02T15:33:23Z

    > > Is it possible to do a nonblocking lock? That is, 
    > > I want several clients to execute,
    > > 
    > >     begin
    > >     if table A is locked
    > >     then
    > >         go around doing stuff on other tables
    > >     else
    > >         lock A and do stuff on A
    > >     endif
    > > 
    > > the problem is, if I use normal lock, then 
    > > after one client has locked and is doing stuff on A
    > > the other one will block and thus it won't be able
    > > to go around doing stuff on other tables. Is it
    > > possible to do a nonblocking lock that will just
    > > fail if the table is locked already? 
    > 
    > Try with user locks. You can find the code in contrib/userlocks.
    
    Yes, this is the proper PostgreSQL solution.
    
    -- 
      Bruce Momjian                        |  http://www.op.net/~candle
      maillist@candle.pha.pa.us            |  (610) 853-3000
      +  If your life is a hard drive,     |  830 Blythe Avenue
      +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026