Locking Expressions

A locking expression works much like a regular locking statement, in that it protects a bit of code to be only run from a single thread at a timw. In contrast to a locking statement, which can wrap a single code statement or a full block, a locking expression wraps access to a single expression, and it's value can be used in a wider expression outside of the scope of the lock.

Example:

var lCount := locking self do CountItemsInList();
// go on to use lOunt, unlocked

Without support for locking as an expression, the above code would have to clumsily declarer a manually typed typewd variable first, and then obtained the count, e.g. as such:

var lCount: Integer;
locking self do begin
  lCount := CountItemsInList();
end;
// go on to use lCount, unlocked

Limitation on Island

Like Locking Statements, locking expressions are limited to work on Monitor classes, on Island. On the other platform, any type can be locked on.

See Also