在下面的代码中,我没有使用任何“线程”。创建多个实例仍然是个问题吗?如果我使用线程,那么由于线程共享地址空间 - 功能可能会被破坏。
当然没有“需要”来创建多个对象,但我这样做(我在这里做的方式)会有问题吗?
#include <iostream>
using namespace std;
class boiler
{
private:
// Non static variables can't be initialized inside a class.
bool boilerEmpty;
bool mixtureBoiled;
public:
boiler ()
{
boilerEmpty = true;
mixtureBoiled = false;
}
void fillBoiler()
{
if (boilerEmpty == true)
{
cout << "\nFill boiler.";
boilerEmpty = false;
}
}
void boilMixture ()
{
if ((boilerEmpty == false) && (mixtureBoiled == false))
{
cout << "\nBoil mixture";
mixtureBoiled = true;
}
}
void drainMixture ()
{
if ((boilerEmpty == false) && (mixtureBoiled == true))
{
cout << "\nDrain mixture.";
boilerEmpty = true;
}
}
};
int main ()
{
boiler b, c;
b.fillBoiler ();
b.boilMixture ();
b.drainMixture ();
c.fillBoiler ();
c.boilMixture ();
c.drainMixture ();
}
答案 0 :(得分:3)
如果您只使用一个线程中的实例,那么拥有多个实例将导致您没有问题。邀请不一致行为的唯一方法是尝试在多个线程中使用一个实例。
如果在多个线程中使用一个实例,则需要使用互斥量信号量进行调查,以确保实例一次只在一个线程中使用。
答案 1 :(得分:1)
在多个执行线程之间存在共享可变数据的情况下,并发编程(无论是否实际多线程)具有挑战性。
根据定义,任何不可变的内容都可以在没有同步问题的情况下共享:
const
数据:字符串文字,声明常量的幻数,...... 因此,您应该担心并发编程的唯一问题是可变数据最终可能会被共享。这种共享可能以两种方式发生:
在你的程序中,没有全局变量,因此共享将是显式的(如果你创建了第二个执行线程)。