Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.programming.threads > #535

Re: Thread safe logging (or protecting global variables)

Path csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!goblin2!goblin.stu.neva.ru!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
From Edek <edek.pienkowski@gmail.com>
Newsgroups comp.programming.threads
Subject Re: Thread safe logging (or protecting global variables)
Date Mon, 05 Sep 2011 20:30:56 +0200
Organization ATMAN - ATM S.A.
Lines 61
Message-ID <j434mo$6cj$1@node2.news.atman.pl> (permalink)
References <Co89q.7290$cb.3785@newsfe14.ams2>
NNTP-Posting-Host 178-37-131-101.adsl.inetia.pl
Mime-Version 1.0
Content-Type text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding 7bit
X-Trace node2.news.atman.pl 1315247640 6547 178.37.131.101 (5 Sep 2011 18:34:00 GMT)
X-Complaints-To usenet@atman.pl
NNTP-Posting-Date Mon, 5 Sep 2011 18:34:00 +0000 (UTC)
User-Agent Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110428 Linux/3.1.0-15 Thunderbird/3.1.0
In-Reply-To <Co89q.7290$cb.3785@newsfe14.ams2>
Xref x330-a1.tempe.blueboxinc.net comp.programming.threads:535

Show key headers only | View raw


On 09/05/2011 08:19 PM, Jef Driesen wrote:
> Hi,
>
> I have a C library that is supposed to be thread-safe under the
> condition that you access each library object only from a single thread.
> This is done by ensuring that objects do not share any state (e.g. no
> global variables) and where necessary reentrant variants of certain C
> library functions are used (e.g. localtime_r).
>
> Now, I want to add a logging feature for debugging purposes. The idea
> would be to implement a logging infrastructure where the amount of
> output can be controlled with a loglevel parameter (defaulting to no
> output) and redirected to a file (defaulting to stderr), like in the
> pseudo code below:
>
[...]
>
> Obviously, this is not thread-safe due to the use of global variables.
> Thus my next idea was to add a global mutex (e.g. pthread_mutex_t on
> unix or CRITICAL_SECTION on windows) protecting these global variables.
> But how do I initialize the mutex, considering that my library doesn't
> have (or need) any initialization functions? For the unix pthread there
> is PTHREAD_MUTEX_INITIALIZER, but as far as I know there is no such
> thing for a windows critical section? How can this problem be solved?

By definition ;): if you're trying to use threads on win32, you are
screwed. There are too many wise people there.

>
> Would it be an acceptable solution to mark the message_set_*()
> functions as not thread-safe and require applications to call them
> before/after any threads are created/destroyed? (For my use case such a
> restriction would be acceptable, although I'm not sure it would be
> fully thread-safe.) Then those functions could initialize the mutex. Or
> will that cause any trouble?

That will not cause any trouble, as long you don't have anything that
tries to do logging before that - think other initialisations, if there
is any C++. If this is pure C, things are easier, assuming everybody
reads the API spec saying "call the init() first". The last can be
achieved by another flag used only for the purpose of detecting any
use of logging mechanisms before init(). Naturally, the flag won't
really be thread safe, but after all it is not for being really used;
it depends if you want this mechanism or not, possibly #ifdef-ed.

>
> Can I even go one step futher and use simple a simple flag (like the
> g_loglevel variable above) that can only be modified from the
> message_set_*() functions, and which is only checked in the message()
> function but not modified.

Will work on x86, but there is no guarantee it won't break on any other
CPU or on some new hardware a couple years later.

An atomic would be enough - either the new standard, or find an
assembly that makes one for the target CPU, a couple of libraries have
been doing that for a long time. For example, logging libraries.

Edek

Back to comp.programming.threads | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Thread safe logging (or protecting global variables) Jef Driesen <jefdriesen@hotmail.com.invalid> - 2011-09-05 20:19 +0200
  Re: Thread safe logging (or protecting global variables) Edek <edek.pienkowski@gmail.com> - 2011-09-05 20:30 +0200
    Re: Thread safe logging (or protecting global variables) Jef Driesen <jefdriesen@hotmail.com.invalid> - 2011-09-06 18:48 +0200
      Re: Thread safe logging (or protecting global variables) Edek <edek.pienkowski@gmail.com> - 2011-09-07 10:34 +0200
        Re: Thread safe logging (or protecting global variables) Jef Driesen <jefdriesen@hotmail.com.invalid> - 2011-09-08 22:00 +0200
          Re: Thread safe logging (or protecting global variables) Edek <edek.pienkowski@gmail.com> - 2011-09-09 18:13 +0200
            Re: Thread safe logging (or protecting global variables) Jef Driesen <jefdriesen@hotmail.com.invalid> - 2011-09-13 17:58 +0200
              Re: Thread safe logging (or protecting global variables) Joshua Maurice <joshuamaurice@gmail.com> - 2011-09-13 13:18 -0700
                Re: Thread safe logging (or protecting global variables) Jef Driesen <jefdriesen@hotmail.com.invalid> - 2011-09-14 07:16 +0200
                Re: Thread safe logging (or protecting global variables) Joshua Maurice <joshuamaurice@gmail.com> - 2011-09-14 13:18 -0700
                Re: Thread safe logging (or protecting global variables) Edek <edek.pienkowski@gmail.com> - 2011-09-14 09:33 +0200
                Re: Thread safe logging (or protecting global variables) Alexander Terekhov <terekhov@web.de> - 2011-09-14 13:17 +0200
                Re: Thread safe logging (or protecting global variables) Joshua Maurice <joshuamaurice@gmail.com> - 2011-09-14 13:03 -0700
                Re: Thread safe logging (or protecting global variables) Joshua Maurice <joshuamaurice@gmail.com> - 2011-09-14 13:19 -0700
                Re: Thread safe logging (or protecting global variables) "James" <no@spam.invalid> - 2011-09-14 19:19 -0700
                Re: Thread safe logging (or protecting global variables) Joshua Maurice <joshuamaurice@gmail.com> - 2011-09-14 21:03 -0700
                Re: Thread safe logging (or protecting global variables) Alexander Terekhov <terekhov@web.de> - 2011-09-15 13:12 +0200
                Re: Thread safe logging (or protecting global variables) Joshua Maurice <joshuamaurice@gmail.com> - 2011-09-15 12:24 -0700
                Re: Thread safe logging (or protecting global variables) Alexander Terekhov <terekhov@web.de> - 2011-09-15 22:22 +0200
                Re: Thread safe logging (or protecting global variables) "James" <no@spam.invalid> - 2011-09-15 13:33 -0700
                Re: Thread safe logging (or protecting global variables) Joshua Maurice <joshuamaurice@gmail.com> - 2011-09-15 15:36 -0700
                Re: Thread safe logging (or protecting global variables) Joshua Maurice <joshuamaurice@gmail.com> - 2011-09-15 15:36 -0700
                Re: Thread safe logging (or protecting global variables) Alexander Terekhov <terekhov@web.de> - 2011-09-16 16:28 +0200
                Re: Thread safe logging (or protecting global variables) Joshua Maurice <joshuamaurice@gmail.com> - 2011-09-16 15:06 -0700
                Re: Thread safe logging (or protecting global variables) Alexander Terekhov <terekhov@web.de> - 2011-09-17 12:50 +0200
                Re: Thread safe logging (or protecting global variables) Alexander Terekhov <terekhov@web.de> - 2011-09-15 12:50 +0200
              Re: Thread safe logging (or protecting global variables) Edek <edek.pienkowski@gmail.com> - 2011-09-14 09:17 +0200
  Re: Thread safe logging (or protecting global variables) Joshua Maurice <joshuamaurice@gmail.com> - 2011-09-08 16:28 -0700
    Re: Thread safe logging (or protecting global variables) Joshua Maurice <joshuamaurice@gmail.com> - 2011-09-08 16:33 -0700
      Re: Thread safe logging (or protecting global variables) Joshua Maurice <joshuamaurice@gmail.com> - 2011-09-08 20:55 -0700
    Re: Thread safe logging (or protecting global variables) Joshua Maurice <joshuamaurice@gmail.com> - 2011-09-12 00:45 -0700

csiph-web