multithreading - 防止同时运行功能
问题描述
全部,
这是我正在寻找的伪代码:
class A : public Base
{
public:
virtual int func();
virtual int other_func();
};
class B : public Base
{
public:
virtual int func();
virtual int other_func();
};
class MainFrame
{
public:
MainFrame();
Base *CreateObject();
int StartThread();
int SomeOtherFunc();
private:
Base *m_base;
};
MainFrame::MainFrame()
{
m_base = NULL;
}
Base *MainFrame::CreateObject()
{
if( <condition1> )
m_base = new A();
else
m_base = new B();
}
int MainFrame::StartThread()
{
int result;
while( !TestDestroy() )
{
result = m_base->func();
Sleep( 5000 );
}
}
int MainFrame::SomeOtherFunc()
{
m_base->other_func();
}
简而言之:我有 2 个类 A 和 B 派生自同一个基类。它们都有 2 个从 Base 重新定义的函数(实际上更多,但这无关紧要)。这些类中的每一个都位于其自己的 DLL 中。
我还有一个主要的 GUI 应用程序,它在某些条件下调用 A 或 B 的方法。它也会在某个时间点产生一个线程。在线程中,程序调用 A/B 类的函数。
现在我想做的是在执行 func() 时防止执行 other_func() 。
我可能应该为此使用互斥锁,但现在的问题是——我该如何设计它?我应该在函数本身内部还是在 MainFrame 方法内部的调用中实例化互斥锁?在这种情况下,互斥锁是否必须是全局变量?它可以是 Base 类的成员吗?
同样,从辅助线程发生的 func() 调用应该停止对 Base 的任何其他方法的调用,直到它完成。
蒂亚!
这是 C++11/MSVC 2010/gcc5.4。
[编辑]:
例如,请参阅以下问题并将其与以下代码进行比较:
std::mutex my_mutex;
int MainFrame::StartThread()
{
int result;
while( !TestDestroy() )
{
std::lock_guard<std::mutex> locker( my_mutex );
result = m_base->func();
Sleep( 5000 );
}
}
int MainFrame::SomeOtherFunc()
{
std::lock_guard<std::mutex> locker( my_mutex );
m_base->other_func();
}
这两种解决方案之间有什么区别吗?它们都适用于我的目的吗 - 专门运行线程函数,阻止任何其他 A/B 函数执行?
[/编辑]
解决方案
推荐阅读
- php - 如何修复在此服务器上找不到请求的 URL。而其他计算机可以访问
- javascript - 不和谐.JS | TypeError:无法读取 null 的属性“运行”
- wordpress - 直接访问 wp-cron.php
- lua - Roblox Studio Lua:杀死脚本问题的现金
- android - 安卓。触摸侦听器在两个视图之间混合
- javascript - 针对浏览器窗口大小?
- laravel-passport - Laravel 个人访问令牌过期
- javascript - 是否可以使用用户定义的 JS 变量字符串来输入 Flask 变量?
- reactjs - 如果我们使用 Typescript,我们如何使用 CDN URL 机制进行包管理?
- javascript - 如何安装 npm peerDependencies 以删除警告