Görevim, işlemlerin yürütülmesi ilkesini benimsememi gerektirir.Proses işlemenin kapsüllenmesi problem yaratır
İşte benim Process
sınıf içerir budur:
class Process
{
public:
Process();
~Process();
pid_t getPid() const;
private:
pid_t pid_;
};
Oluşturucu:
Process::Process()
{
this->pid_ = fork();
}
Yıkıcı: Burada
Process::~Process()
{
if (this->pid_ > 0)
kill(this->pid_, SIGKILL);
}
sorun şu: enkapsüle ve bu tür benzeri bir nesne oluşturduktan sonra:
void example()
{
Process pro;
if (pro.pid_ == 0)
{
// Child Process
}
else if (pro.pid_ < 0)
{
// Error
}
else
{
// Parent Process
}
}
Programım hiçbir zaman çocuk koduna girmez, ancak normalde fork()
(kapsülleme olmadan) bir çekicilik gibi çalışır.
Nerede hata yaptım?
İlginç! Fakat bu konuyla ilgili başka bir yol, algoritmamı bozacak bir uyku veya bekleyişten başka bir şey var mı? Cevabınız için teşekkür ederim. –
Daha birçok senkronizasyon yöntemi var, Senkronizasyonun bir yolu iletişim kullanıyor, örn. borular, dosyalar, Başka bir yol, özellikle senkronizasyon için yapılan yapıları kullanmaktır, örn. semaphores veya bekleyin. En iyi olanı seçmek için yeterli problemi bilmiyorum, –
Atamadan bahsettiğimden kesinlikle İsim Verilmiş Borular kullanacağım. Yardımın için çok teşekkürler. –