gpt4 book ai didi

c++ - 简单线程同步

转载 作者:可可西里 更新时间:2023-11-01 18:00:27 30 4
gpt4 key购买 nike

我需要对一段代码进行简单的“一次一个”锁定。考虑可以从多个线程运行的函数 func:

void func()
{
// locking/mutex statement goes here
operation1();
operation2();
// corresponding unlock goes here
operation3();
}

我需要确保 operation1operation2 始终“一起”运行。对于 C#,我会在这两个调用周围使用一个简单的 lock block 。什么是 C++/Win32/MFC 等价物?

大概是某种Mutex

最佳答案

修复 Michael solution以上。

Michael 解决方案非常适合 C 应用程序。但是当在 C++ 中使用时,由于异常的可能性,这种风格是不鼓励的。如果在 operation1 或 operation2 中发生异常,则临界区将无法正确离开,所有其他线程将阻塞等待。

// Perfect solutiuon for C applications
void func()
{
// cs previously initialized via InitializeCriticalSection
EnterCriticalSection(&cs);
operation1();
operation2();
LeaveCriticalSection(&cs);
operation3();}
}

// A better solution for C++
class Locker
{
public:
Locker(CSType& cs): m_cs(cs)
{
EnterCriticalSection(&m_cs);
}
~Locker()
{
LeaveCriticalSection(&m_cs);
}
private:
CSType& m_cs;
}
void func()
{
// cs previously initialized via InitializeCriticalSection
{
Locker lock(cs);
operation1();
operation2();
}
operation3();
}

关于c++ - 简单线程同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/635276/

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