【发布时间】:2010-02-23 23:16:39
【问题描述】:
我正在编写一个允许链接应用程序查询资源的共享库。
资源类仅使用静态方法实现(见下文)。它还使用一个全局对象(在匿名命名空间中很好地限定了范围)。全局变量的原因是我不想将库的用户暴露给系统内部。我想我可以使用 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 上的方法。
因此,我的问题是如何实现 globvar 以实现线程安全?
我正在 Ubuntu 9.10 上使用 gcc 4.4.1 进行开发
【问题讨论】:
-
不可变对象总是线程安全的。
-
@John Knoeller:OP 从来没有提到不可变,想知道你从哪里选择的。全局状态总是可以修改的。
-
这是一个建议,而不是观察。
标签: c++ thread-safety