|
Hi everyone.
Quick question: is reference comparison atomic? For example:
Object a, b;
....
if (a == b)
....
....
Or should I use the following?
Interlocked.ReferenceEquals(a, b);
I imagine if the method exists it's because a==b wouldn't be atomic, which I guess makes sense because we're reading two references, and changes could occur in between the reads. Am I right?
Sorry about the trivial question, but I want to make sure and my brain isn't working very well at the moment (too much coding...).
Thanks modified on Tuesday, March 16, 2010 11:00 AM
|
|
|
|
|
What your code is doing is:
- read a
- read b
- perform the comparison
Any other thread may write between those two reads. Being "atomic" doesn't apply to the comparison as it only deals with local values.
There is no Interlocked.ReferenceEquals , you're just calling the inherited Object.ReferenceEquals .
AFAIK there is no way to read two references atomically (so that no other thread can write between the two reads).
|
|
|
|
|
Daniel Grunwald wrote: What your code is doing is:
- read a
- read b
- perform the comparison
Any other thread may write between those two reads. Being "atomic" doesn't apply to the comparison as it only deals with local values.
Exactly.
Daniel Grunwald wrote: There is no Interlocked.ReferenceEquals, you're just calling the inherited Object.ReferenceEquals.
True! I hadn't realised Interlocked didn't override the method.
Daniel Grunwald wrote: AFAIK there is no way to read two references atomically (so that no other thread can write between the two reads).
Well, surely with a lock.
Thanks for your answer.
|
|
|
|
|
Yes, you are right.
For reference types, using a==b will comapare references and not the values that we generally mean to have.
a.Equals(b) is a correct way to compare two reference types. This will comapre values and not memory address.
|
|
|
|
|
That's not what I meant. The issue wasn't whether I was comparing references or values, but whether it was atomic or not. It's not atomic.
Thanks anyway.
|
|
|
|
|
even if it were atomic, what good would it be, as the result of the comparison is to be used for some purpose while it also is volatile. What you probably want is a lock over some code of which the comparison is only a fraction.
lock(myLock) {
if (a==b) doSomething();
}
|
|
|
|
|
Yes, I know, but thanks. I was just wondering about it, I'm not actually using it anywhere.
It's pretty obvious that it isn't atomic, though, it's just that my brain isn't working properly and I wanted to make sure I got it right.
|
|
|
|
|
i created 100 buttons ( each with different text) with click even handlers daynamically.how can i display the text of the clicked button (how can i know which button is being clicked)?
|
|
|
|
|
Depending on how you did it the event handler is probably of the form
void Button_OnClick(object sender, eventargs args)
{
}
the variable sender is most likely the button (dependant upon your implementation), so you can probably do something like
void Button_OnClick(object sender, eventargs args)
{
Button buttonClicked = sender as Button;
if(buttonClicked == null)
return;
string buttonText = buttonClicked.Text;
}
If this doesn't answer your question, post some code and please remember the <pre> tags!Dalek Dave: There are many words that some find offensive, Homosexuality, Alcoholism, Religion, Visual Basic, Manchester United, Butter.
Pete o'Hanlon: If it wasn't insulting tools, I'd say you were dumber than a bag of spanners.
|
|
|
|
|
The sender item in the event parameters indicates which item was the origin of the event. You can get the text of the button by casting the sender to a Button and then read the Text property. Here's a quick sample
private void ButtonEventHandler(object sender, EventArgs e)
{
Button button = sender as Button;
if (button == null) return;
txtClicked.Text = button.Text;
} "WPF has many lovers. It's a veritable porn star!" - Josh Smith As Braveheart once said, "You can take our freedom but you'll never take our Hobnobs!" - Martin Hughes.
My blog | My articles | MoXAML PowerToys | Onyx
|
|
|
|
|
Now that is just frightening! Dalek Dave: There are many words that some find offensive, Homosexuality, Alcoholism, Religion, Visual Basic, Manchester United, Butter.
Pete o'Hanlon: If it wasn't insulting tools, I'd say you were dumber than a bag of spanners.
|
|
|
|
|
|
No problem! Dalek Dave: There are many words that some find offensive, Homosexuality, Alcoholism, Religion, Visual Basic, Manchester United, Butter.
Pete o'Hanlon: If it wasn't insulting tools, I'd say you were dumber than a bag of spanners.
|
|
|
|
|
|
You're welcome."WPF has many lovers. It's a veritable porn star!" - Josh Smith As Braveheart once said, "You can take our freedom but you'll never take our Hobnobs!" - Martin Hughes.
My blog | My articles | MoXAML PowerToys | Onyx
|
|
|
|
|
hi,
plz can anyone let me knw the code for implementing fix server in C# as client side coding is given in this site but i need to have both........in order to make the communication possible.
|
|
|
|
|
Either post this to the C# forum, or to the Quick Answers.
Don't just post it wherever it will fit as all you will do is annoy people.You should never use standby on an elephant. It always crashes when you lift the ears. - Mark Wallace
C/C++ (I dont see a huge difference between them, and the 'benefits' of C++ are questionable, who needs inheritance when you have copy and paste) - fat_boy
|
|
|
|
|
Priyanka doesn`t annoy, pandereta!
|
|
|
|
|
Yes he does, and why are you calling me a tambourine?
Did you know:
That by counting the rings on a tree trunk, you can tell how many other trees it has slept with.
|
|
|
|
|
You are a tambourine and a pim-pim man. I'm telling you the trues of the shipping man. You annois. I'm learning and my stickers says "4 days to hollidays". Pandereta counting-rings are you? Flipao!
|
|
|
|
|
Run run as fast as you can
You can't catch me I'm the Gingerbread man
"WPF has many lovers. It's a veritable porn star!" - Josh Smith As Braveheart once said, "You can take our freedom but you'll never take our Hobnobs!" - Martin Hughes.
My blog | My articles | MoXAML PowerToys | Onyx
|
|
|
|
|
How do your type with your face in a crack pipe?
Panic, Chaos, Destruction.
My work here is done.
or "Drink. Get drunk. Fall over." - P O'H
|
|
|
|
|
WTF is dat
Ravi S
Coding is my birth-right and bugs are part of feature my code has!
_________________________________________
Me
Facebook
Twitter
|
|
|
|
|
Little confused here. You're saying you're after the code for the server side componant for something? I'm not aware of this "fix server" but have you tried where you got it from in the first place?
|
|
|
|
|
please tell me in detail because i read some article about this and i don not understand clearly.
thanks in advancetbhattacharjee
|
|
|
|