Re: Is this thread safe?

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



On Sun, 08 Jul 2007 19:12:21 -0700, <me@xxxxxxxxxxxxxxxxxx> wrote:

public void WriteToLog(string message)
{
StringBuilder bld = new StringBuilder();
bld.AppendFormat(null,"{0} {1}", DateTime.Now.ToString("yy-
MM-dd hh:mm:ss"),message);
StreamWriter sw = File.AppendText(m_LogFile);
sw.WriteLine(bld.ToString());
sw.Flush();
sw.Close();
}

MSDN says all static members in System.IO are thread safe, but here an
object of type StreamWriter is created from AppendText and I'm not
sure...... Do I need critical section or not?

That depends on what sort of access to m_LogFile might occur.

The String class is immutable, so once the reference has been passed in, even if other threads are reading from the class, that wouldn't affect the thread executing this method. Getting the StreamWriter is thread-safe, with File.AppendText() being a static method (in a static class, no less) and so falls under the "thread-safe" qualification for static members.

But you use m_LogFile which is presumably a class member accessible by multiple threads. At the very least, it ought to be volatile. I think that being a normal reference, you probably don't need to lock around it.. Even if you were modifying it from some other thread, the issue there would be getting an out-of-date reference (i.e. you get the reference, then immediately after it changes), and if that's a possibility then that's a synchronization issue that can't be dealt with simply with a lock.

All that said, why not use the File.AppendAllText() method instead? It doesn't avoid whatever issue (if any) exists with m_LogFile, but it does simplify the code a lot.

Pete
.



Relevant Pages

  • Re: Is this thread safe?
    ... StringBuilder bld = new StringBuilder; ... StreamWriter sw = File.AppendText; ... object of type StreamWriter is created from AppendText and I'm not ... that being a normal reference, you probably don't need to lock around it. ...
    (microsoft.public.dotnet.framework)
  • Re: Best way to use static method functions from MC++ lib in VB.NET
    ... class library DLLs automatically referenced by the Visual Studio .NET IDE. ... Certain project types add references to other .NET DLLs (such as the ... declare a "ConsoleEx" class with static members that were meant to augment ... > I create a reference to the library from a VB.NET application and I can ...
    (microsoft.public.dotnet.languages.vc)
  • Re: path error code, why?
    ... However, a function can pass back arbitrarily many values, via a variety of mechanisms, including the return value, passing variables by reference, and passing reference types by value, all of which can be used simultaneously. ... Some have "void" as the return type, ... you've declared local variables with the same name as the static members "percentuale" and "valore". ... This may be related to the previous issue, since the CalcolaPercentuale() function uses the static members; perhaps you meant to use the parameters "a" and "b" instead of the static members. ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: a very tricky question...
    ... members donot reside in the object but we are accessing static members ... using object reference technique. ... logically replaces a method reference with a static reference. ...
    (comp.lang.java.gui)
  • Re: What is the difference between class and type.
    ... Michael Borgwardt wrote: ... > That's not entirely true - with static members accessed through a reference ... Chris Smith - Lead Software Developer/Technical Trainer ...
    (comp.lang.java.programmer)