Mam proces A, który zawiera tabelę w pamięci z zestawem rekordów (rekord A, rekord B itp.)
Teraz ten proces może uruchomić wiele wątków, które mają wpływ na rekordy, a czasami możemy mieć 2 wątki próbujące uzyskać dostęp do tego samego rekordu - należy odrzucić tę sytuację. W szczególności, jeśli rekord jest ZABLOKOWANY przez jeden wątek, chcę, aby inny wątek został przerwany (nie chcę BLOKOWAĆ ani CZEKAĆ).
Obecnie robię coś takiego:
synchronized(record)
{
performOperation(record);
}
Ale to sprawia mi problemy ... ponieważ podczas gdy Process1 wykonuje operację, jeśli Process2 wchodzi, blokuje / czeka na zsynchronizowaną instrukcję, a po zakończeniu Process1 wykonuje operację. Zamiast tego chcę coś takiego:
if (record is locked)
return;
synchronized(record)
{
performOperation(record);
}
Jakieś wskazówki, jak można to osiągnąć? Każda pomoc byłaby bardzo mile widziana. Dzięki,