How do you use locks (Thread::Semaphore) with a short example?

Using locks in Perl with the Thread::Semaphore module helps manage multiple threads accessing shared resources. This can prevent race conditions and ensure data integrity. Here’s a simple example to demonstrate how to implement a semaphore lock in Perl.

use strict; use warnings; use threads; use Thread::Semaphore; # Initialize a semaphore with a count of 1 (binary semaphore) my $semaphore = Thread::Semaphore->new(1); # Shared resource my $counter = 0; # Subroutine to increment the counter safely sub increment { $semaphore->down; # Acquire lock for (1..1000) { $counter++; } $semaphore->up; # Release lock } # Create threads my @threads; for (1..10) { push @threads, threads->create(\&increment); } # Wait for all threads to finish $_->join() for @threads; print "Final counter value: $counter\n";

Perl Thread Semaphore Locks Multithreading Shared Resources Data Integrity