gpt4 book ai didi

c++ - 这样的类只能由多个线程设置一次吗?

转载 作者:行者123 更新时间:2023-11-30 02:10:20 24 4
gpt4 key购买 nike

所以有一个像这样的类:

class mySafeData
{
public:
mySafeData() : myData(0), changed( false )
{
}

void Set(int i)
{
boost::mutex::scoped_lock lock(myMutex);
myData = i; // set the data
changed = true; // mark as changed
myCondvar.notify_one(); // notify so a reader can process it
}

void Get( int& i)
{
boost::mutex::scoped_lock lock(myMutex);
while( !changed )
{
myCondvar.wait( lock );
}
i = myData;
changed = false; // mark as read
myCondvar.notify_one(); // notify so the writer can write if necessary
}
private:
int myData;
boost::mutex myMutex;
boost::condition_variable myCondvar;
bool changed;
};

循环中的一个线程调用Set。以及3个或更多线程调用Get如何让所有调用Get的线程真正获取数据(每个线程shall Get data only once a Set 被调用了)(似乎只有第一个调用 Get 的“读者”获取数据)?

更新会这样吗?

class mySafeData
{
public:
mySafeData() : myData(0)
{
}

void Set(int i)
{
boost::mutex::scoped_lock lock(myMutex);
myData = i; // set the data
}

void Get( int& i)
{
boost::mutex::scoped_lock lock(myMutex);
i = myData;

}
private:
int myData;
boost::mutex myMutex;
};

最佳答案

我认为您不需要条件变量;互斥量应该足够了。

此外,changed 变量对您没有帮助;它只允许一个线程看到更改。也将其删除。

关于c++ - 这样的类只能由多个线程设置一次吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4713357/

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