I don't think this will help you. myList.SyncRoot does the locking for you
when you go through it - but I don't think locking on it is going to achieve
anything.

To keep something safe, you have to make sure *all your code* that accesses
that list does one of 2 things

1. Calls lock on that list

2. Goes through the SyncRoot

There is no way you can protect against someone accessing the list from some
other thread - all the lock keyword does is call Monitor.Enter and Exit for
you. Those methods take care of putting the right SyncBlockIndex into the
object's header (at a negative offset in memory,actually)


Sriram

----------------------------------------------------------------------------
-

I blog at http://www.dotnetjunkies.com/weblog/sriram

----------------------------------------------------------------------------


> -----Original Message-----
> From: Unmoderated discussion of advanced .NET topics.
> [mailto:[EMAIL PROTECTED] On Behalf Of
> Steve Lydiatt
> Sent: 12 October 2004 19:54
> To: [EMAIL PROTECTED]
> Subject: Re: [ADVANCED-DOTNET] Multithreading question
>
> How about.....
>
> lock( myList.SyncRoot)
> {
>  etc.....
> }
>
>
>
>
> On Tuesday, October 12, 2004, at 02:53PM, Steve Johnson
> <[EMAIL PROTECTED]> wrote:
>
> >When you "lock" an object, there's no protection against
> other threads
> >accessing that object.  The system simply enforces the
> constraint that
> >only 1 thread that "asks" for the lock will be granted that
> lock at a
> >time.  You need to ensure that every place in your code that
> accesses
> >your array list asks for the same lock first.  The object
> referenced in
> >your lock statement doesn't even have to be the object
> you're trying to
> >protect.  As long as every place in the code that accesses the array
> >list uses the same lock, you're fine.
> >
> >class myclass
> >{
> >  private ArrayList myList = new ArrayList();
> >
> >  void func1()
> >  {
> >    // will block if any other thread holds a lock on myList
> >    lock(myList)
> >    {
> >      foreach(Item myItem in myList)
> >        ...
> >    }
> >  }
> >
> >  void func2()
> >  {
> >    // not protected.  Even if another thread holds a lock,
> access is not
> >    // prevented here.
> >    myList.Add(anotherItem);
> >  }
> >}
> >
> >
> >To fix this sample, you'd wrap the myList.Add() statement with
> >lock(myList).  The synchronization system here provides protection
> >against concurrency only when everybody plays by the same rules.
> >
> >
> >--
> >Steve Johnson
> >
> >On Tue, 12 Oct 2004 21:07:46 +1300, [EMAIL PROTECTED]
> <[EMAIL PROTECTED]> wrote:
> >> I am having trouble understanding .net and c#'s lock command
> >>
> >> What happens if a lock is called on a object that is already being
> >> used by another process.
> >>
> >> I am getting weird behavior in dotnet remoting to do with threads.
> >>
> >> If i put a lock on all methods in there, i get a deadlock which i
> >> would expect, but when i only put a lock on the only method that
> >> enumerates through a arraylist i get a enumeration
> violation because
> >> of modification to the array during enumeration.  I dont
> see how this
> >> is possible if i put a lock on the object that contains
> the arraylist
> >> while i enumerate through it. ?!?!?!?!
> >>
> >> I am thinking if another thread already is already in that object
> >> both may execute at the same time regardsless of the lock block.
> >>
> >> Can anyone confirm or deny my theory and give me some
> advice on what
> >> might be going on.
> >
> >===================================
> >This list is hosted by DevelopMentorR
> http://www.develop.com Some .NET
> >courses you may be interested in:
> >
> >Essential .NET: building applications and components with
> CSharp August
> >30 - September 3, in Los Angeles
> http://www.develop.com/courses/edotnet
> >
> >View archives and manage your subscription(s) at
> >http://discuss.develop.com
> >
> >
>
> ===================================
> This list is hosted by DevelopMentorR  http://www.develop.com
> Some .NET courses you may be interested in:
>
> Essential .NET: building applications and components with
> CSharp August 30 - September 3, in Los Angeles
> http://www.develop.com/courses/edotnet
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>

===================================
This list is hosted by DevelopMentor�  http://www.develop.com
Some .NET courses you may be interested in:

Essential .NET: building applications and components with CSharp
August 30 - September 3, in Los Angeles
http://www.develop.com/courses/edotnet

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to