gpt4 book ai didi

c++ - Boost 条件变量等效于 CRITICAL_SECTION

转载 作者:行者123 更新时间:2023-11-28 07:32:14 33 4
gpt4 key购买 nike

目前我的应用程序中有一个 boost::mutex 代码部分,看起来像这样

{//Lock
boost::unique_lock<boost::mutex> lock(some_mutex);
while(container.empty())
{
condition_var.wait(lock);
}/*Block if empty - for spurious wakeup*/
......
,,,,,,
}//Unlock

现在 some_mutex 是 boost::mutex 类型condition_var 的类型是 boost::condition_variable

现在 condition_var 被 condition_var.notifyone() 方法触发,不幸的是这个方法需要 boost::mutex 来运行。我计划删除 boost::mutex 并使用 windows 提供的 CRITICAL_SECTION。但是我相信升压条件不适用于 Windows CRITICAL_SECTION关于我的选择可能是用 CRITICAL_SECTION 替换 boost::mutex 并且对上述代码进行最小更改的任何建议?

最佳答案

您可以将 boost::condition_variable_any 与任何类似互斥的对象一起使用,例如 CRITICAL_SECTION。 (正如 DaveS 评论所说)

但是,我强烈建议您分析速度并将您的第一个简单版本与以下代码进行比较。

#include <windows.h>
#include <boost/thread/condition_variable.hpp>

// wrapper class for CriticalSection
class win32cs_mutex : boost::noncopyable {
public:
win32cs_mutex() { ::InitializeCriticalSection(&cs_); }
~win32cs_mutex() { ::DeleteCriticalSection(&cs_); }
void lock() { ::EnterCriticalSection(&cs_); }
void unlock() { ::LeaveCriticalSection(&cs_): }
private:
CRITICAL_SECTION cs_;
};

win32cs_mutex some_mutex;
boost::condition_variable_any condition_var;

// client code
{
boost::unique_lock<win32cs_mutex> lock(some_mutex);
while(container.empty())
{
condition_var.wait(lock);
}
...
}

关于c++ - Boost 条件变量等效于 CRITICAL_SECTION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17428668/

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