[armedbear-devel] [Updated4] Patch for ABCL against BORDEAUX-THREADS HEAD

Mark Evenson evenson at panix.com
Fri Mar 18 15:54:01 UTC 2011

On 3/18/11 4:41 PM, Ville Voutilainen wrote:
> On 18 March 2011 17:37, Mark Evenson<evenson at panix.com>  wrote:
>> This was the previous implementation, which was the subject of the
>> criticism:
>> (defun condition-wait (condition lock)
>>   (check-type condition condition-variable)
>>   (release-lock lock)
>>   (do ()
>>       ((acquire-lock lock nil))
>>     (threads:synchronized-on condition
>>        (threads:object-wait condition))))
> If this is directly mapped to a pthread implementation, the loop must be there.

I think it is slightly different, as the semantics of BT:CONDITION-WAIT 
are merely that the lock is always reacquired before returning.  The 
caller of BT:CONDITION-WAIT is required to check for spurious wakeups.

>> I believe the race condition is on the the synchronization on the condition
>> variable, not on the mutex lock.
> The condition variable needs to use the mutex lock given, not a separate lock.

The condition variable interface is using the mutex lock specified in 
BT:CONDITION-WAIT.  For the ABCL implementation, I'm using the Java 
monitor associated with the condition variable for the additional 
synchronization needed to implement BT:CONDITION-NOTIFY which couldn't 
use the mutex lock without contention problems.  But definitely check my 
logic here, as it has been faulty before.

"A screaming comes across the sky.  It has happened before, but there
is nothing to compare to it now."

More information about the armedbear-devel mailing list