Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / New Users / July 2007

Tip: Looking for answers? Try searching our database.

Is this thread safe?

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
me@mincho.bulhost.com - 09 Jul 2007 03:12 GMT
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?
Thanks!
Peter Duniho - 09 Jul 2007 04:35 GMT
> public void WriteToLog(string message)
>         {
[quoted text clipped - 10 lines]
> 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
me@mincho.bulhost.com - 09 Jul 2007 06:24 GMT
On Jul 9, 1:35 pm, "Peter Duniho" <NpOeStPe...@nnowslpianmk.com>
wrote:
> > public void WriteToLog(string message)
> >         {
[quoted text clipped - 32 lines]
>
> Pete

Thanks Pete,
using AppendAllText really simplified things. Cheers!

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.