Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to detect if an object is locked?

Is there any way to determine if an object is locked in C#? I have the unenviable position, through design where I'm reading from a queue inside a class, and I need to dump the contents into a collection in the class. But that collection is also read/write from an interface outside the class. So obviously there may be a case when the collection is being written to, as the same time I want to write to it.

I could program round it, say using delegate but it would be ugly.

like image 621
scope_creep Avatar asked Aug 19 '09 14:08

scope_creep


People also ask

How do you check if an object is locked?

TryEnter to inspect whether object is locked or not. We're adding some simple APIs to ICorDebug which allow you to explore managed locks (Monitors). For example, if a thread is blocked waiting for a lock, you can find what other thread is currently holding the lock (and if there is a time-out).

How do I check if an object is locked in SAP?

In most cases, the reason for a locked SAP object is that it is being processed. So SAP prevents any other modification on the same object by putting a lock on it. To check such a lock, use the SAP transaction SM12 "Select Lock Entries".

What do you mean by locking of objects?

Lock Object is a feature offered by ABAP Dictionary that is used to synchronize access to the same data by more than one program. Data records are accessed with the help of specific programs. Lock objects are used in SAP to avoid the inconsistency when data is inserted into or changed in the database.


2 Answers

You can always call the static TryEnter method on the Monitor class using a value of 0 for the value to wait. If it is locked, then the call will return false.

However, the problem here is that you need to make sure that the list that you are trying to synchronize access to is being locked on itself in order to synchronize access.

It's generally bad practice to use the object that access is being synchronized as the object to lock on (exposing too much of the internal details of an object).

Remember, the lock could be on anything else, so just calling this on that list is pointless unless you are sure that list is what is being locked on.

like image 191
casperOne Avatar answered Sep 22 '22 08:09

casperOne


Monitor.TryEnter will succeed if the object isn't locked, and will return false if at this very moment, the object is locked. However, note that there's an implicit race here: the instance this method returns, the object may not be locked any more.

like image 20
Barry Kelly Avatar answered Sep 22 '22 08:09

Barry Kelly