gpt4 book ai didi

c++ - 你能帮我将互斥对象应用到这段代码吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:06:01 24 4
gpt4 key购买 nike

我一直在谷歌搜索互斥教程/示例,但似乎无法找到适合我需要的情况(或者更可能是我找到了,但从未意识到如何将它应用到我的情况,因为我在时刻)。

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

3rd party 程序有很多线程,所以回调函数一直在被调用。其他 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;
}

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

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

最佳答案

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

关于c++ - 你能帮我将互斥对象应用到这段代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12063723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com