Implement SemaphoreLockStrategy as LOCK_CAPABILITY_NOBLOCK by using $nowait parameter of sem_acquire()
Since PHP 5.6.1, sem_acquire() has a $nowait parameter to make it non-blocking. This parameter is not used in TYPO3.
-> The SemaphoreLockStrategy can be made support LOCK_CAPABILITY_NOBLOCK.
Note: php semaphores are not cluster-ready. A RedisLockStrategy is currently missing in the core and would be a great addition.
#1 Updated by Markus Klein 4 months ago
- Status changed from New to Needs Feedback
Thanks for your report.
Unfortunately this is only half of the truth.
The noWait option is not implemented like it is usually on system level. Setting it to true will cause the function to return false if the lock couldn't be acquired.
Unfortunately there seems to be no way to distinguish between a failed locking attempt (system related) or because it would block.
This is the reason why I didn't implement the noWait feature into the core's API.
Other means of locking allow to distinguish properly between "WOULD BLOCK" and an error.