Multi-threading question

  • Thread starter Thread starter Curious
  • Start date Start date
C

Curious

Here's the question - I've created a program that has multiple
threads. Some threads use the same file. In order to avoid memory
corruption when multiple threads access the same file, I use a "lock"
around that block of code so only a single thread can access the file
at the same time.

Someone asked me if there is a better way to handle this than using
"lock", I don't know what to say. Any suggestion?
 
Curious said:
Here's the question - I've created a program that has multiple
threads. Some threads use the same file. In order to avoid memory
corruption when multiple threads access the same file, I use a "lock"
around that block of code so only a single thread can access the file
at the same time.

Someone asked me if there is a better way to handle this than using
"lock", I don't know what to say. Any suggestion?

In a word, no.

That's the best way to handle it
 
In a word, no.

That's the best way to handle it

I agree with you. However, I heard about monitor and sephamore. Are
they relevant or even better than "lock"?

I also read some complicated stuff about "notify" and "wait". Are they
useful?
 
Here's the question - I've created a program that has multiple
I agree with you. However, I heard about monitor and sephamore. Are
they relevant or even better than "lock"?

I also read some complicated stuff about "notify" and "wait". Are they
useful?

Depends what you're doing but then, in a word again, no. Well I guess
that's harsh to say they are not useful. But I have never had to resort to
using them in any high performance multi-threaded application I've ever
made. However I have had to use lock correctly and carefully controlled my
threads.

I'd bet you 25c you're not going to need them for your application.

Out of interest are you coming across some kind of issue with locking or
performance which has caused you to question 'lock'? Or was it just an
academic question?

For some reason 'lock' has come up a lot recently! I thought I'd cover it:
http://www.gotinker.com/2010/03/11/locking-and-multi-threading/
 
Depends what you're doing but then, in a word again, no.  Well I guess
that's harsh to say they are not useful.  But I have never had to resort to
using them in any high performance multi-threaded application I've ever
made.  However I have had to use lock correctly and carefully controlled my
threads.

I'd bet you 25c you're not going to need them for your application.

Out of interest are you coming across some kind of issue with locking or
performance which has caused you to question 'lock'?  Or was it just an
academic question?

For some reason 'lock' has come up a lot recently!  I thought I'd coverit:http://www.gotinker.com/2010/03/11/locking-and-multi-threading/
Thanks for the answer! I never came across any issue with "lock". I
was grilled in a technical interview about "lock". I told him that I
used lock to resolve the issue with memory corruption. He then asked
me if there was a better method to use than to use lock, and that got
me.
 
Thanks for the answer! I never came across any issue with "lock". I
was grilled in a technical interview about "lock". I told him that I
used lock to resolve the issue with memory corruption. He then asked
me if there was a better method to use than to use lock, and that got
me.

Lock keyword is just a convinient way to use Monitor
Which means
lock(obj)
{
// do something here
}

is equivalent to

Monitor.Enter(obj);
// do something
Monitor.Exit(obj);
 
Lock keyword is just a convinient way to use Monitor
Which means
lock(obj)
{
    // do something here

}

is equivalent to

Monitor.Enter(obj);
// do something
Monitor.Exit(obj);

Not exactly - more like
Monitor.Enter(obj);
try {
// do something
} finally {
Monitor.Exit(obj);
}
But there are some special precautions, AFAIK, to handle async
exceptions which can appear between Monitor.Enter and try.
 
Back
Top