This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Racing Condition


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]