Threading is on the front pages more than ever, so to speak. Where only a few years ago programmers could brush the topic aside as complicated and not-very-useful, it’s increasingly harder to hide behind those excuses. Multi-core systems are the status quo and the only real way to get better performance (read: scale) is to have multi-threaded code. So it’s no surprise that the topic is revived and there is more talk about it. And what threading if one doesn’t mention the pitfalls and problems? Consider the following question:int x = 1;
int y = 0; if (y == 0)
{
// Can x be anything but 1 at this point?
}There is no shortage of this type of questions. And there is no shortage of answers either!The only correct answer to the above question is: It depends on the language! What does the keyword volatile do? Same answer.Does my code suffer from the ABA problem? Same answer (but that one is more complicated)Similar question, same answer.
// Thread 1
x = 1;
y = 0;// Thread 2
int a = x;
int b = y; // if b == 0, is a == 1?
Here is a pdf presentation of a lock-free hashtable in Java. Here is the video presentation. Again, if the same algorithm implemented in a different language, the result will be different. Namely, it won’t work. Why? Because the memory models are different. C++ has a very, very different memory model than .Net than Java. (It wouldn’t be entirely wrong to say that C/C++ don’t define any memory coherency models as such.) Each in their turn probably have a different memory model from other languages. And talking about threading without knowing the memory model is like assuming you can drive at the same speed on all roads. Well, some aren’t even paved, yet some have minimum speed. Read more: the Void
QR:
int y = 0; if (y == 0)
{
// Can x be anything but 1 at this point?
}There is no shortage of this type of questions. And there is no shortage of answers either!The only correct answer to the above question is: It depends on the language! What does the keyword volatile do? Same answer.Does my code suffer from the ABA problem? Same answer (but that one is more complicated)Similar question, same answer.
// Thread 1
x = 1;
y = 0;// Thread 2
int a = x;
int b = y; // if b == 0, is a == 1?
Here is a pdf presentation of a lock-free hashtable in Java. Here is the video presentation. Again, if the same algorithm implemented in a different language, the result will be different. Namely, it won’t work. Why? Because the memory models are different. C++ has a very, very different memory model than .Net than Java. (It wouldn’t be entirely wrong to say that C/C++ don’t define any memory coherency models as such.) Each in their turn probably have a different memory model from other languages. And talking about threading without knowing the memory model is like assuming you can drive at the same speed on all roads. Well, some aren’t even paved, yet some have minimum speed. Read more: the Void
QR:
0 comments:
Post a Comment