thread safety and syncroot

  • Thread starter Thread starter TS
  • Start date Start date
T

TS

ArrayList myCollection = new ArrayList();
foreach ( Object item in myCollection ) {
// code here.
}

Can someone explain how more than one thread would execute code? So if i
have some code in a web page that a user runs that iterates over an
arraylist, what is the scenario where more than one thread would be running
this code and could possibly modify the collection before the iteration of
the arraylist completes?

Since i instantiate myCollection (only one thread always runs the code for a
single request?) how would any other thread access myCollection?

thanks
 
Since i instantiate myCollection (only one thread always runs the code for
a single request?) how would any other thread access myCollection?

It kinda depends on what goes in place of "// code here". Assuming it is
something simple and not passing out the collection somewhere else. Then no,
multiple threads should not be accessing the collection. However, by the
same assumption:
ArrayList myCollection = new ArrayList();
foreach ( Object item in myCollection ) {
// code here.
}

the collection is empty and thus nothing happens anyway. So do you have a
more complete example? The devil is in the details :)

n!
 
TS said:
ArrayList myCollection = new ArrayList();
foreach ( Object item in myCollection ) {
// code here.
}

Can someone explain how more than one thread would execute code? So if i
have some code in a web page that a user runs that iterates over an
arraylist, what is the scenario where more than one thread would be running
this code and could possibly modify the collection before the iteration of
the arraylist completes?

Since i instantiate myCollection (only one thread always runs the code for a
single request?) how would any other thread access myCollection?

If you're creating the collection in a thread and never making it
available to any other thread, then you don't need to worry.
 
Hi,

|
| ArrayList myCollection = new ArrayList();
| foreach ( Object item in myCollection ) {
| // code here.
| }
|
| Can someone explain how more than one thread would execute code? So if i
| have some code in a web page that a user runs that iterates over an
| arraylist, what is the scenario where more than one thread would be
running
| this code and could possibly modify the collection before the iteration
of
| the arraylist completes?
|
| Since i instantiate myCollection (only one thread always runs the code for
a
| single request?) how would any other thread access myCollection?

The code below does not makes too much sense, you create the collection and
right away iterate in it without adding elements first. So I thnk the code
above is not the "real thing"

-Where is the collection created?

- How it's populated?


If the collection is used by only one thread (it's created & populate bu the
thread method) you are ok.
 
sorry, for the example, i just copied it out of msdn. You should assume that
myCollection has been populated somewhere.

As for multiple threads accessing it, what are some scenarios when i'm
writing my code that i would enlist the help of additional threads (with me
knowing or not knowing)?

the only thing i think think of is performing an asynchronous operation.

thanks Jon!
 
Hello,

An ArrayList can support multiple readers concurrently, as long as the
collection is not modified. To guarantee the thread safety of the
ArrayList, all operations must be done through the wrapper returned by the
Synchronized method.

Enumerating through a collection is intrinsically not a thread-safe
procedure. Even when a collection is synchronized, other threads can still
modify the collection, which causes the enumerator to throw an exception.
To guarantee thread safety during enumeration, you can either lock the
collection during the entire enumeration or catch the exceptions resulting
from changes made by other threads.

Sincerely,

Luke Zhang

Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
 
Hi,

| Besides,
|
| Where is multi threading party going on?

What u mean?
 
Back
Top