你能帮我把mutex对象应用到这段代码吗?

时间:2012-08-21 22:03:52

标签: c++ mutex

我一直在谷歌搜索互联网教程/示例,但似乎找不到我需要的情况(或者更有可能我做了,但从未意识到如何将它应用到我的情况,因为我不完全理解它在力矩)。

我有一个C ++ DLL,它有2个回调函数。回调函数从第三方程序调用。每个回调函数都将信息添加到全局变量(单独的全局变量)。还有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;
}

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

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

1 个答案:

答案 0 :(得分:1)

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