This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: Racing Condition
- From: Ian Lance Taylor <iant at google dot com>
- To: Hei Chan <structurechart at yahoo dot com>
- Cc: "gcc-help at gcc dot gnu dot org" <gcc-help at gcc dot gnu dot org>
- Date: Wed, 19 Dec 2012 23:42:31 -0800
- Subject: Re: Racing Condition
- References: <1355987765.49360.YahooMailNeo@web165005.mail.bf1.yahoo.com>
On Wed, Dec 19, 2012 at 11:16 PM, Hei Chan <structurechart@yahoo.com> wrote:
>
> Let's say I have 2 threads trying to call the function below without any synchronization:
>
> void func(int x) {
> static char buffer[512];
> sprintf(buffer, "%d\n", x);
> printf(buffer);
> }
>
> since buffer is static, and so obviously in some cases, there will be 2 threads trying to write to buffer, 1 writing to buffer and another reading from it, or 2 reading from it.
>
> Since it is just an array of char, besides content/stdout might not be what the callers should be expecting; will it cause the program to crash.
This is not a GCC question. It is a question about C, or about the
threading model used by your OS.
In principle this will be undefined behaviour and anything at all could happen.
In practice the program will probably not crash, though exactly what
it will print is completely unpredictable. For example, there is no
reason to think that it will only print numbers.
Ian