[fpc-devel] Re: Multi threading support

Boian Mitov mitov at mitov.com
Thu Jul 31 14:59:45 CEST 2008


  Hmm... it looks almost one to one copy from our code in Version 4.0 of our libraries ;-) . Are you one of our customers, or you have simply come with the same idea as us?

  With best regards,
    Boian Mitov

--------------------------------------------------------------------
Mitov Software
http://www.mitov.com
--------------------------------------------------------------------


  ----- Original Message ----- 
  From: Henri Gourvest 
  To: FPC developers' list 
  Sent: Thursday, July 31, 2008 5:57 AM
  Subject: Re: [fpc-devel] Re: Multi threading support


  This is an idea using automatic cleanup of interfaces:

  procedure foo; <- lock
  begin
    synchronize(cs);
    [...]
  end; <- unlock

  or

  procedure foo; <- lock
  begin
     with synchronize(cs) do <- lock
     begin
       [...]
     end; <- unlock
  end;


  { TLock }

  type
    TLock = class(TInterfacedObject)
    private
      FCriticalSection: TCriticalSection;
    public
      constructor Create(cs: TCriticalSection); virtual;
      destructor Destroy; override;
    end;

  constructor TLock.Create(cs: TCriticalSection);
  begin
    FCriticalSection := cs;
    cs.Acquire;
  end;

  destructor TLock.Destroy;
  begin
    FCriticalSection.Release;
    inherited;
  end;

  function synchronize(cs: TCriticalSection): IUnknown;
  begin
    Result := TLock.Create(cs);
  end;







  2008/7/31 tom_at_work <tom_at_work at gmx.at>

    Hello,

    Am 31.07.2008 um 11:56 schrieb Florian Klaempfl:


      Vinzent Höfler schrieb:

        -------- Original-Nachricht -------

        OTOH, it's looks about the same as in Java and even Java now has
        explicit Locks, because "synchronized" simply isn't efficient nor
        flexible enough... ;)


      Since I don't use java, what's the difference to locks?



    In practice imo not too much, synchronized is just a convenience functionality, exactly like the one you proposed.

    In short the difference:

    Java always locks on monitors i.e. guards which are available for any object; Pre 1.5 the only way to lock was using some syntax additions. The syntax allows per method (class or instance) or per block scope, i.e.

    synchronized void doSomething() { ... } // method level: monitor object is either "this" or this.class object

    void doSomething() {
      ...
      synchronized (monitor) { // on block level; monitor object is "this" if not specified otherwise the given object
      }
      ...
    }

    With 1.5 they added a "Lock" interface which provides the usual lock()/trylock()/unlock() methods which should be self-explaining.
    This for example allows interlocked locks if required

    lock1.lock();
    ...
    lock2.lock();
    ...
    lock1.unlock();
    ...
    lock2.unlock();


    Hth,
     Thomas_______________________________________________

    fpc-devel maillist  -  fpc-devel at lists.freepascal.org
    http://lists.freepascal.org/mailman/listinfo/fpc-devel





------------------------------------------------------------------------------


  _______________________________________________
  fpc-devel maillist  -  fpc-devel at lists.freepascal.org
  http://lists.freepascal.org/mailman/listinfo/fpc-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20080731/41e1413f/attachment.html>


More information about the fpc-devel mailing list