-
October 10th, 2008, 02:05 PM
#1
Context switching and mutex
Hello Guys I am new in multithreading programming.
Lets says I have a situation like the following.
global variable
std::vector<int> vec;
Thread 1
Code:
mutex.acquire();
int size = vec.size(); //context switch to thread 2
for(int i = 0; i<size;i++)
{
vec[i] = 10;
}
thread 2
vec.erase(vec.first(), vec.first()+3);
This can create a major havoc.. Is there any threading approache other than careful programming to solve this kind of problem..???
Dont forget to rate my post if you find it useful.
-
October 10th, 2008, 04:45 PM
#2
Re: Context switching and mutex
It depends on what the thread 2 is doing. Mutexes are guards that can help, but it needs all participants to be good citizens i.e. you have to think about what you want to guard as resources. So, in your case, vec seems to be a resource that needs to be shared and hence guarded. Hence, all those participants that need access to this resource SHOULD adhere to rules. In your case, it is insufficient to use a acquire in just thread1, but also in all other threads before they lay hands on vec.
-
October 10th, 2008, 05:30 PM
#3
Re: Context switching and mutex
Agreement with Kiran. There will not be "major havoc" if thread 2 also tries to acquire the same mutex as thread 1, before doing anything to the shared vec.
-
October 10th, 2008, 06:17 PM
#4
Re: Context switching and mutex
(Everything Kirants and MikeAthon have said is right!!!)
There are two basic approaches do dealing with multi-threading issues.
1) Works by implementation/usage
2) Works by design.
In the first scenario, you use non-thread safe classes, and explicitly code the proper guards around the necessary items
In the second scenarion, you develop robust classes that will give the proper behaviour in all multi-threaded environments.
My experience has been that the first approach is the more common, but is definately mor fragile. It leaves lots of opportunities to miss things in the initial implementation, and for things to break in the face of changes that are unrelated to the actual problem.
The second approach (which I use 90%+ of the time) is to develop classes which are throughly tested to be thread safe. These can then be utilized at the higher levels without having to woory about many of the details.
note: there is actually a third approach which is gaining in popularity, and has some major advantages in multi-processor / multi-core systems (consider the next generation 16,24,32 core systems...). This approach dictates that ALL objects are immutable ALWAYS. An objects state is totally controlled by the constuctor, and NOTHING can change it once it is created.
Since EVERYTHING (except object construction) is read-only, most of the issues simply disappear. And only one thread will be in the process of constructing a specific instance.
This approach requires a MAJOR change in mindset and philosophy, so is normally not viable for existing applications. But the benefits are quite significant!!!
TheCPUWizard is a registered trademark, all rights reserved. (If this post was helpful, please RATE it!)
2008, 2009,2010
In theory, there is no difference between theory and practice; in practice there is.
* Join the fight, refuse to respond to posts that contain code outside of [code] ... [/code] tags. See here for instructions
* How NOT to post a question here
* Of course you read this carefully before you posted
* Need homework help? Read this first
-
October 10th, 2008, 06:39 PM
#5
Re: Context switching and mutex
Immutability is one of three patterns discussed in the October 2008 MSDN Magazine, for improving thread safety. In the order given in the article, the three patterns are: immutability, purity, isolation.
Unfortunately, the article barely mentions these concepts before concluding.
It's worth a read anyway, for the other points made by the article (whose title I really like): "Solving 11 Likely Problems In Your Multithreaded Code" by Joe Duffy at http://msdn.microsoft.com/en-us/magazine/cc817398.aspx
Mike
-
October 10th, 2008, 06:43 PM
#6
Re: Context switching and mutex
Originally Posted by MikeAThon
Immutability is one of three patterns discussed in the October 2008 MSDN Magazine, for improving thread safety. In the order given in the article, the three patterns are: immutability, purity, isolation.
Unfortunately, the article barely mentions these concepts before concluding.
It's worth a read anyway, for the other points made by the article (whose title I really like): "Solving 11 Likely Problems In Your Multithreaded Code" by Joe Duffy at http://msdn.microsoft.com/en-us/magazine/cc817398.aspx
Mike
That was an excellent article, and one can only hope that is is the first of a series.....
TheCPUWizard is a registered trademark, all rights reserved. (If this post was helpful, please RATE it!)
2008, 2009,2010
In theory, there is no difference between theory and practice; in practice there is.
* Join the fight, refuse to respond to posts that contain code outside of [code] ... [/code] tags. See here for instructions
* How NOT to post a question here
* Of course you read this carefully before you posted
* Need homework help? Read this first
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|