मेरे पास एक प्रक्रिया है जिसमें रिकॉर्ड के एक सेट (रिकॉर्डा, रिकॉर्डबी, आदि ...) के साथ स्मृति में एक तालिका होती है।
अब, यह प्रक्रिया कई थ्रेड लॉन्च कर सकती है जो रिकॉर्ड्स को प्रभावित करते हैं, और कभी-कभी हमारे पास एक ही रिकॉर्ड तक पहुंचने के लिए 2 थ्रेड्स हो सकते हैं - इस स्थिति से इनकार किया जाना चाहिए। विशेष रूप से अगर कोई रिकॉर्ड एक धागे से बंद है, तो मैं चाहता हूं कि दूसरा धागा गर्भपात करे (मैं ब्लॉक या वॉकर नहीं करना चाहता)।
वर्तमान में मैं ऐसा कुछ करता हूं:
synchronized(record)
{
performOperation(record);
}
लेकिन इससे मुझे समस्या हो रही है ... क्योंकि Process1 ऑपरेशन कर रहा है, अगर Process2 इसमें आता है / सिंक्रनाइज़ स्टेटमेंट पर ब्लॉक करता है और जब Process1 समाप्त हो जाता है तो यह ऑपरेशन करता है। इसके बजाय मुझे कुछ ऐसा चाहिए:
if (record is locked)
return;
synchronized(record)
{
performOperation(record);
}
यह कैसे पूरा किया जा सकता है पर कोई सुराग? कोई भी सहायताकाफी प्रशंसनीय होगी। धन्यवाद,