2009-07-02 32 views
9

Trên hệ thống Linux, quy trình con có xem các luồng hiện có theo cùng một cách như quy trình gốc không?ngã ba và chủ đề hiện tại?

int main() { 

    //create thread 1 

    int child_pid = fork(); 

    if (0 == child_pid) 
    { 
     .. 
    } 
    else 
    { 
     .. 
    } 

Vì toàn bộ không gian địa chỉ được sao chép cho quá trình con, điều gì xảy ra với trạng thái của chuỗi. Điều gì sẽ xảy ra nếu luồng 1 trong phân đoạn trên đang chờ tín hiệu điều kiện. Là nó trong trạng thái chờ đợi trong quá trình con là tốt?

Trả lời

0

Chủ đề không được kế thừa từ một tiến trình con trên hệ thống Linux bằng fork(). Một nguồn chuyên sâu là ở đây: http://linas.org/linux/threads-faq.html

+2

Câu hỏi thường gặp đó rất lỗi thời. Sự khác biệt rõ ràng nhất của người dùng là LinuxThreads đã bị lỗi thời bởi NPTL kể từ kernel 2.6 và glibc 2.3, giải quyết tất cả các vấn đề nổi bật với hành vi luồng không giống như POSIX. – ephemient

13

Chủ đề trên Linux hiện nay cố gắng để ở lại posix complient. Chỉ thread gọi được tái bản, không đề khác (lưu ý rằng ví dụ trên solaris bạn có thể chọn những gì ngã ba không tùy thuộc vào những gì thư viện bạn liên kết tới)

Từ http://www.opengroup.org/onlinepubs/000095399/functions/fork.html:

Một quá trình được tạo ra với một chuỗi đơn. Nếu một quá trình đa luồng gọi fork(), quy trình mới phải chứa bản sao của số gọi và toàn bộ không gian địa chỉ, có thể bao gồm các trạng thái của mutexes và các tài nguyên khác. Do đó, để tránh lỗi, quy trình con chỉ có thể thực hiện hoạt động không đồng bộ-tín hiệu an toàn cho đến thời gian như một trong các chức năng exec được gọi. Ngã ba bộ điều khiển có thể được thiết lập bằng phương tiện của hàm pthread_atfork() trong để duy trì ứng dụng bất biến trên các cuộc gọi fork().

+1

Cảm ơn. Liên kết là sự trợ giúp tuyệt vời. – Mac13

Các vấn đề liên quan