2014-07-17 26 views
6

Çok iş parçacıklı bir uygulamayı çatal etmeye çalıştım. Çatal ikinci iş parçamı çoğaltmıyor gibi görünüyor.Çatal komutu çok dişli bir uygulama ile çalışıyor mu?

#include <stdlib.h> 
#include <pthread.h> 
#include <iostream> 
#include <linux/unistd.h> 
#include <iostream> 
#include <sys/types.h> 
#include <sys/wait.h> 
#include <signal.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <string> 
#include <unistd.h> 
#include <stdlib.h> 
#include <sys/ioctl.h> 

using namespace std; 

void Loop(const char* zThread) 
{ 
    while (true) 
    { 
     sleep(2); 
     cout << "LOOP : " << zThread << " : " << getpid() << endl; 
    } 
} 

void *MyFunction(void *pData) 
{ 
    Loop("Second"); 
}; 

int main() 
{ 
    pthread_t thread1; 

    pthread_create(&thread1, NULL, MyFunction, NULL); 

    int iPID = fork(); 

    if (iPID == 0) 
     cout << "Child : " << getpid() << endl; 
    else 
     cout << "Parent : " << getpid() << endl; 

    Loop("First"); 

    return EXIT_SUCCESS; 
}; 

O çocuk sürecinin ikinci parçacığı tarafından yazılan herhangi bir bilgi içermiyor şu çıktıyı verir:

Bu

benim kodudur.

test_1/ss> ./a.out 
Parent : 11877 
Child : 11879 
LOOP : Second : 11877 
LOOP : First : 11877 
LOOP : First : 11879 
LOOP : Second : 11877 
LOOP : First : 11877 
LOOP : First : 11879 
LOOP : Second : 11877 
LOOP : First : 11877 
LOOP : First : 11879 
LOOP : Second : 11877 
LOOP : First : 11877 
LOOP : First : 11879 
LOOP : Second : 11877 
LOOP : First : 11877 
LOOP : First : 11879 
LOOP : Second : 11877 
LOOP : First : 11877 
LOOP : First : 11879 

İkinci konuya ne oldu? çatal denilen bir () -

cevap

5

Yalnızca çağıran tel işaretlenmiştir. docs itibaren

:

bir proses tek iplikle oluşturulan edilecektir. Çok iş parçacıklı bir işleminin fork() işlevini çağırması durumunda, yeni işlem, arama iş parçacığının bir kopyasını ve tüm adres alanını, muhtemelen muteks ve diğer kaynak durumlarını içermelidir. Sonuç olarak, hatalardan kaçınmak için, numaralı çocuk işlemi, yalnızca exec işlevlerinden biri kadar zaman olarak numaralı telefona kadar asenkronize sinyal güvenli operasyonlar yürütebilir.

3

adam çatal

  • çocuk süreci tek iplik oluşturulur. Ebeveynin tüm vir- tual adres alanı, muteksler, con- dition değişkenleri ve diğer pthreads nesneleri de dahil olmak üzere, çocukta çoğaltılır; pthread_atfork (3) 'un kullanımı, bunun neden olabileceği sorunların üstesinden gelmek için numaralı telefondan yardım isteyebilir.
İlgili konular