簡體   English   中英

強制解鎖可重入鎖定

[英]Force unlocking a reentrant lock

我有一個可重入鎖,我根據自己的需要包裝在一個定制的課程中。 但是,由於應用程序的性質,將鎖定到可重入鎖定的線程卡住(外部故障)並且無法釋放重入鎖定。

我想知道是否有一種方法可以明確解鎖重入鎖? 我知道重入鎖的API沒有這樣的方法 - 但是我考慮引入一個計時器任務,它將在一段時間后解鎖重入鎖或者殺死保存重入鎖的線程。

試圖強制解鎖我的折返鎖定的任何其他建議? 我問的解決方案非常好。

我不是在外部解鎖,而是在單獨的線程中執行阻塞代碼並使其超時

這樣的事情

Future<MyTask>future = taskExecutor.submit(myTask)
try {
    future.get(5,TimeUnit.Seconds);
    ...
    }
    catch (Exception e)
    {
        future.cancel(true); // attempt to interupt the thread
        throw new Exception();
    }

根據我的評論,任何鎖都應該包含在try/finally塊中,以確保在出現問題時釋放鎖

_lock.lock(); // will wait until this thread gets the lock
try
{
    // critical section
}
finally
{
    //releasing the lock so that other threads can get notifies
    _lock.unlock();
}       

這在鎖定對象跟蹤中得到了證明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM