C++ 流程处理的封装会产生问题
我的任务要求我概括流程处理的原则 下面是我的C++ 流程处理的封装会产生问题,c++,process,fork,C++,Process,Fork,我的任务要求我概括流程处理的原则 下面是我的过程类包含的内容: class Process { public: Process(); ~Process(); pid_t getPid() const; private: pid_t pid_; }; 建造商: Process::Process() { this->pid_ = fork(); } 析构函数: Process::~Process() { if (this->pid_ >
过程类包含的内容:
class Process
{
public:
Process();
~Process();
pid_t getPid() const;
private:
pid_t pid_;
};
建造商:
Process::Process()
{
this->pid_ = fork();
}
析构函数:
Process::~Process()
{
if (this->pid_ > 0)
kill(this->pid_, SIGKILL);
}
问题是:在封装和创建这样的对象之后:
void example()
{
Process pro;
if (pro.pid_ == 0)
{
// Child Process
}
else if (pro.pid_ < 0)
{
// Error
}
else
{
// Parent Process
}
}
void示例()
{
过程亲;
如果(pro.pid==0)
{
//子进程
}
否则如果(专业pid<0)
{
//错误
}
其他的
{
//父进程
}
}
我的程序几乎从不输入子代码,但是当我正常地(没有封装)使用fork()
时,它就像一个符咒一样工作
我哪里出错了?这听起来像是一个错误。在你的情况下,父母大部分时间似乎在孩子做你期望的事情之前就杀死了孩子。如果两个进程之间没有同步,任何执行顺序都是可能的。如果您希望孩子始终执行工作,则必须实现某种形式的同步。一种常见的黑客行为(即不是真正的同步)是在父级中进行[sleep][2]()
ing。非常常见的是在父母中等待孩子的完成。这听起来像是一个错误。在你的情况下,父母大部分时间似乎在孩子做你期望的事情之前就杀死了孩子。如果两个进程之间没有同步,任何执行顺序都是可能的。如果您希望孩子始终执行工作,则必须实现某种形式的同步。一种常见的黑客行为(即不是真正的同步)是在父级中进行[sleep][2]()
ing。非常常见的是[wait][2]()
在父母那里等待孩子的完成。有趣!但是,除了睡眠或等待之外,还有没有其他方法会影响我的算法呢?谢谢您的回答。还有很多同步方法,一种同步方法是使用通信,例如管道、文件,另一种方法是使用专门用于同步的结构,例如信号量或等待。我对你的问题了解不够,无法选择最好的,我肯定会使用命名管道,因为作业中提到了它。非常感谢你的帮助。很有趣!但是,除了睡眠或等待之外,还有没有其他方法会影响我的算法呢?谢谢您的回答。还有很多同步方法,一种同步方法是使用通信,例如管道、文件,另一种方法是使用专门用于同步的结构,例如信号量或等待。我对你的问题了解不够,无法选择最好的,我肯定会使用命名管道,因为作业中提到了它。非常感谢你的帮助。