Я пишу разделяемую библиотеку, которая позволит связанным приложениям запрашивать ресурс.
Класс ресурсов реализован только со статическими методами (см. Ниже). Он также использует глобальный объект (хорошо ограниченный в анонимном пространстве имен). Причина глобальной переменной заключается в том, что я не хочу раскрывать пользователей библиотеки внутренним частям системы. Полагаю, я мог бы использовать идиому pimpl, но это все еще не решает проблему безопасности потоков.
Класс выглядит примерно так:
//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(){}
Некоторые из приложений, использующих эту библиотеку, будут многопоточными и, таким образом, могут вызывать методы в A из разных потоков.
Поэтому мой вопрос заключается в том, как реализовать глобвар, чтобы обеспечить безопасность потоков?
Я занимаюсь разработкой с использованием gcc 4.4.1 в Ubuntu 9.10