public inbox for pthreads-win32@sourceware.org
 help / color / mirror / Atom feed
From: "John E. Bossom" <drifting@pioneerwireless.ca>
To: pthreads-win32@sourceware.org
Subject: Re: pthread related issues
Date: Mon, 22 Dec 2008 13:19:00 -0000	[thread overview]
Message-ID: <20081222081819.lgug4d45d9ssksgg@webmail.pioneerwireless.ca> (raw)
In-Reply-To: <46333.1920.qm@web55808.mail.re3.yahoo.com>

The C++ stream libraries are not thread safe....
That is to say, if you have more than one thread operating on the
same instance of a stream, undefined results will occur.

Why would it crash on Windows and not linux....?
1) actual implementation of the stream library is different
2) thread scheduling... the crash is random based upon thread context
    switching... running a program within the debugger effectively
    changes it's behavour... you now have a debugger in there possibily
    slowing down or otherwise affecting the scheduling. For a well behaved
    thread app this isn't a problem... but for one with race conditions
    it is.

Assuming your little snippet, below, is accessing that file from
more than one thread, you are going to have to synchronize access to
that file/stream.

Hope that helps,

John E. Bossom

Quoting jayshankar nair <n_jayshankar@yahoo.com>:

> Hi,
>
> I have installed windows pthread-win32 pthreadGC2 dll(WINDOWS XP). I  
>  see my multithreaded windows program crashing at different  
> locations   when i am handling I/O. If i use gdb, the program is  
> able to run.  For the below program sometimes crahes at ifstream  
> fin(..)
>
> int ConfigData::fillConfigData(char *p_cFileName)
> {
>         int iStatus = 1;
>         char pcPort[10];
>
>         ifstream fin(p_cFileName, ifstream::in)---> crashes sometimes here.
>
>         //fin.getline(m_pcUrl,MAX_URL_LEN);
>         //cout << "----- fillConfigData URL :" << m_pcUrl<<endl;
>
>         fin.getline(pcPort,10);
>         m_iPort = atoi(pcPort);
>         cout << "----- fillConfigData port :" << m_iPort << endl;
>
>         fin.getline(m_pcMethod,MAX_CALLBACK_METHOD_NAME_LEN);
>         cout << "----- fillConfigData method: " << m_pcMethod<< endl;
>
>
> }
> I am able to run the same program with linux.
>
> For compilation, i include -lpthreadGC2(libthreadGC2.dll). I have   
> tried compilation both with and without -mthreads options. But the   
> problem persists.
>
>
> Am i missing something.
>
>
> Suggestions appreciated.
>
> Thanks,
> Jay
>
>
>
>
>
>


      reply	other threads:[~2008-12-22 13:19 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-22  7:22 jayshankar nair
2008-12-22 13:19 ` John E. Bossom [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20081222081819.lgug4d45d9ssksgg@webmail.pioneerwireless.ca \
    --to=drifting@pioneerwireless.ca \
    --cc=pthreads-win32@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).