Ich schreibe eine gemeinsame Bibliothek, die es verknüpften Anwendungen ermöglicht, eine Ressource abzufragen.
Die Ressourcenklasse ist nur mit statischen Methoden implementiert (siehe unten). Außerdem verwendet sie ein globales Objekt (das in einem anonymen Namespace gut skaliert ist). Der Grund für die globale Variable ist, dass ich die Benutzer der Bibliothek nicht den Interna des Systems aussetzen möchte. Ich nehme an, ich hätte ein pimpl-Idiom verwenden können, aber damit wäre das Problem der Threadsicherheit immer noch nicht gelöst.
Die Klasse sieht in etwa so aus:
//Header
class A
{
public:
static int foo();
static double foobar();
};
// Source
namespace
{
SomeResourceObject globvar; // <- how can this variable be made thread safe ?
}
int A::foo(){}
double A::foobar(){}
Einige der Anwendungen, die diese Bibliothek verwenden, sind multithreadingfähig und können daher Methoden auf A von verschiedenen Threads aus aufrufen.
Meine Frage ist daher, wie globvar zu implementieren, so dass Threadsafe sein?
Ich entwickle mit gcc 4.4.1 auf Ubuntu 9.10