use Gimp; use Fcntl ':flock'; my ( $lockfile, $lock_fh ); Gimp::initialized() or Gimp::init() or Gimp::initialized() or die "failed connecting to gimp server"; $lockfile = '/tmp/gimplock-' . Gimp->server_eval( q[$$] ); # append the Perl-Server pid to the lockfile name, in case you have multiple Perl-Servers { no warnings 'redefine'; *Gimp::lock = sub { open( $lock_fh, ">>$lockfile" ) or die "failed opening lockfile '$lockfile' for appending: $!"; return flock( $lock_fh, LOCK_EX ); }; *Gimp::yield = *Gimp::lock{CODE}; *Gimp::unlock = sub { flock( $lock_fh, LOCK_UN ); }; } Gimp::lock(); # ... do something with gimp ... Gimp::yield(); # give somebody else a turn # ... do something else with gimp ... Gimp::unlock();