1

我一直在谷歌上搜索互斥锁教程/示例,但似乎找不到适合我需要的情况(或者更有可能我找到了,但从未意识到如何将其应用于我的情况,因为我目前并不完全理解它)。

我有一个具有 2 个回调函数的 C++ dll。回调函数是从第 3 方程序调用的。每个回调函数将信息添加到全局变量(单独的全局变量)。还有 2 个其他函数,每个函数都使用这些全局变量。

3rd 方程序有很多线程,所以回调函数一直被调用。其他 2 个函数由用户手动调用。全局变量最终会同时被 2 个事物访问并导致崩溃。

现在全局变量在这样的类中

 class Global
{
public:
static CString &  get_allscores() {  static CString get_allscores; return get_allscores; }
static CString &  get_allplayers() {  static CString allplayers; return allplayers; }
};

有人可以向我展示一个关于如何将互斥锁与两个都访问其中一个全局变量的函数一起使用的快速示例吗?

谢谢

编辑:

这样的情况怎么办

CString allchat; //global variable

void function1()
{
    allchat += "test";
}

void function2()
{
    cout << allchat;
}

如果这些函数被许多线程重复且无序地调用,我可以添加一个互斥对象以使其对多线程友好吗?

到目前为止,我的计划是在程序启动时创建一个没有所有者的互斥体。然后当每个函数被调用时,它将获得所有权并在函数结束时释放它。这是正确的做法吗?

4

1 回答 1

1

关于答案的编辑部分:是的,如果这些是访问全局数据的唯一函数,那么为这两个函数添加互斥锁将使代码线程安全。当然,危险在于在开发和维护代码的过程中忘记了必须使用互斥锁来保护这些全局数据。当然,该问题的解决方案是将编写的代码包装在一个类中,使其allchat成为一个私有成员,向该类添加一个互斥锁,并使用任何访问allchat.

于 2012-08-22T01:37:48.333 回答