Click here to Skip to main content
15,912,329 members
Home / Discussions / C#
   

C#

 
AnswerRe: how to use matlab bifurcation Pin
Eddy Vluggen4-Nov-15 2:19
professionalEddy Vluggen4-Nov-15 2:19 
QuestionReturning reference to object (lock loses effect?) Pin
Member 120616003-Nov-15 0:24
Member 120616003-Nov-15 0:24 
AnswerRe: Returning reference to object (lock loses effect?) Pin
OriginalGriff3-Nov-15 0:44
mveOriginalGriff3-Nov-15 0:44 
GeneralRe: Returning reference to object (lock loses effect?) Pin
Member 120616003-Nov-15 1:03
Member 120616003-Nov-15 1:03 
GeneralRe: Returning reference to object (lock loses effect?) Pin
OriginalGriff3-Nov-15 1:11
mveOriginalGriff3-Nov-15 1:11 
GeneralRe: Returning reference to object (lock loses effect?) Pin
OriginalGriff3-Nov-15 1:28
mveOriginalGriff3-Nov-15 1:28 
GeneralRe: Returning reference to object (lock loses effect?) Pin
Member 120616003-Nov-15 1:33
Member 120616003-Nov-15 1:33 
GeneralRe: Returning reference to object (lock loses effect?) Pin
OriginalGriff3-Nov-15 1:49
mveOriginalGriff3-Nov-15 1:49 
Laugh | :laugh:
That's where it gets complicated...
The value in tmp will only change when you use an assignment operator.
But the object it refers to can be changed!

Let's try an example.
C#
int[] arr = new int[] {1, 2, 3, 4, 5};
int[] tmp = arr;

Both tmp and arr refer to the same array of 5 integers:
C#
private void PrintThem(int[] data)
   {
   foreach (int i in data)
      {
      Console.WriteLine(i);
      }
   }
...
   int[] arr = new int[] {1, 2, 3, 4, 5};
   int[] tmp = arr;
   PrintThem(arr);
   PrintThem(tmp);

will produce the same numbers.
And if I do this:
C#
int[] arr = new int[] {1, 2, 3, 4, 5};
int[] tmp = arr;
arr[2] = 666;
PrintThem(arr);
PrintThem(tmp);
You will get the same sequence printed twice:
1
2
666
4
5
1
2
666
4
5

It's only when I create a new array that it changes:
C#
int[] arr = new int[] {1, 2, 3, 4, 5};
int[] tmp = arr;
arr[2] = 666;
arr = new int {7, 8, 9};
PrintThem(arr);
PrintThem(tmp);
Will produce:
7
8
9
1
2
666
4
5
If your setter modifies m_HostAddresses by assigning it a new collection:
C#
m_HostAddresses = new List<SocketStructure>();
then there is no threading problem because the collections are different.
But if it modifies the content instead:
C#
lock (m_locker)
    {
    m_HostAddresses.Add(new SocketStructure());
    }
Then that isn't thread safe unless every time you access the collection you add the lock round that code as well.

Even returning a copy may not cure this problem, if any of the SocketStructure elements in the collection are altered at any point, because the copy of the collection does not generate a copy of all the elements in it, just the references to them!

This can take a bit of getting your head round, and without being able to see when your eyes start to glaze over it's very difficult to know if you understand what I mean. Laugh | :laugh:
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...

GeneralRe: Returning reference to object (lock loses effect?) Pin
Member 120616003-Nov-15 1:56
Member 120616003-Nov-15 1:56 
GeneralRe: Returning reference to object (lock loses effect?) Pin
OriginalGriff3-Nov-15 2:19
mveOriginalGriff3-Nov-15 2:19 
GeneralRe: Returning reference to object (lock loses effect?) Pin
Member 120616003-Nov-15 2:22
Member 120616003-Nov-15 2:22 
GeneralRe: Returning reference to object (lock loses effect?) Pin
OriginalGriff3-Nov-15 5:37
mveOriginalGriff3-Nov-15 5:37 
AnswerRe: Returning reference to object (lock loses effect?) Pin
Pete O'Hanlon3-Nov-15 0:57
mvePete O'Hanlon3-Nov-15 0:57 
AnswerRe: Returning reference to object (lock loses effect?) Pin
John Torjo3-Nov-15 1:34
professionalJohn Torjo3-Nov-15 1:34 
GeneralRe: Returning reference to object (lock loses effect?) Pin
Member 120616003-Nov-15 1:53
Member 120616003-Nov-15 1:53 
AnswerRe: Returning reference to object (lock loses effect?) Pin
John Torjo3-Nov-15 1:59
professionalJohn Torjo3-Nov-15 1:59 
GeneralRe: Returning reference to object (lock loses effect?) Pin
Member 120616003-Nov-15 2:02
Member 120616003-Nov-15 2:02 
GeneralRe: Returning reference to object (lock loses effect?) Pin
John Torjo3-Nov-15 2:04
professionalJohn Torjo3-Nov-15 2:04 
GeneralRe: Returning reference to object (lock loses effect?) Pin
Member 120616003-Nov-15 2:20
Member 120616003-Nov-15 2:20 
GeneralRe: Returning reference to object (lock loses effect?) Pin
John Torjo3-Nov-15 2:25
professionalJohn Torjo3-Nov-15 2:25 
GeneralRe: Returning reference to object (lock loses effect?) Pin
Member 120616003-Nov-15 2:38
Member 120616003-Nov-15 2:38 
GeneralRe: Returning reference to object (lock loses effect?) Pin
John Torjo4-Nov-15 6:05
professionalJohn Torjo4-Nov-15 6:05 
GeneralRe: Returning reference to object (lock loses effect?) Pin
John Torjo4-Nov-15 6:08
professionalJohn Torjo4-Nov-15 6:08 
GeneralRe: Returning reference to object (lock loses effect?) Pin
Member 120616004-Nov-15 6:17
Member 120616004-Nov-15 6:17 
AnswerRe: Returning reference to object (lock loses effect?) Pin
John Torjo4-Nov-15 6:22
professionalJohn Torjo4-Nov-15 6:22 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.