2010-10-08 15 views
6

tôi đã có những câu hỏi này trong tâm trí của tôi kể từ khi tôi đã đọc một số chủ đề mới về quy trình và chủ đề. Tôi sẽ rất vui nếu ai đó có thể giúp tôi.Câu hỏi về processess zombie và chủ đề

1) Điều gì sẽ xảy ra nếu một luồng được đánh dấu là không thể hủy được, và sau đó quá trình này bị giết bên trong phần quan trọng?

2) Chúng tôi có chuỗi chính cho chương trình được biết đến với hệ điều hành không? tôi có nghĩa là hệ điều hành cung cấp cho các chủ đề đầu tiên của chương trình một số quyền lợi hoặc một cái gì đó?

3) Khi chúng ta giết một quá trình và các luồng không bị bẻ khóa, chúng có trở thành zombie không?

+0

Ngoài ra còn có một câu hỏi khác ở đây, cách các luồng chia sẻ chồng của quá trình đang chạy? Stack có chứa tất cả hoặc chúng được preempted từ stack trên chuyển đổi giữa các chủ đề? –

Trả lời

5

Trước tiên, đừng giết hoặc hủy chủ đề, yêu cầu họ tự sát. Nếu bạn giết một sợi từ bên ngoài, bạn không bao giờ biết những tác dụng phụ nào - các biến, trạng thái đồng bộ hóa nguyên thủy, vv - bạn bỏ lại phía sau. Nếu bạn tìm thấy nó cần thiết cho một chủ đề để chấm dứt khác sau đó có thread vấn đề kiểm tra một chuyển đổi, bắt một tín hiệu, bất cứ điều gì, và làm sạch trạng thái của nó trước khi thoát khỏi chính nó.

1) Nếu không thể hủy bạn có nghĩa là bị tách rời, giống như chuỗi được nối. Bạn không biết những gì bạn đang để lại mess nếu bạn đang giết chết nó một cách mù quáng.

2) Từ quan điểm mức ứng dụng, điều chính là nếu chủ đề chính thoát() hoặc trả về() nó sẽ gỡ tất cả các chủ đề khác ra khỏi nó. Nếu chủ đề chính chấm dứt chính nó với pthread_exit() các chủ đề còn lại tiếp tục.

3) Giống như quy trình, luồng sẽ giữ lại một số tài nguyên cho đến khi nó được gặt (được nối) hoặc chương trình kết thúc, trừ khi nó được chạy như tách ra.

RE Lưu ý: Chủ đề không chia sẻ ngăn xếp mà mỗi chủ đề của riêng họ. Xem clone() để biết một số thông tin về tạo chuỗi.

+1

Cảm ơn câu trả lời của bạn, đầu tiên tôi không có nghĩa là tách ra, tôi có nghĩa là khi nó tự đánh dấu là PTHREAD_CANCEL_DISABLE. Cũng bởi "từng có riêng của họ" bạn có nghĩa là giống như quá trình ngăn xếp hoặc có diffrences? –

+1

Xin lỗi về (1). Tôi không nghĩ rằng xử lý dọn dẹp được gọi là nếu quá trình này bị giết hơn là hủy bỏ. IOW các điểm hủy được thực hiện thông qua thư viện pthread; họ sẽ không ngăn chặn thread bị smacked bởi hệ điều hành. Nó sẽ làm cho một dự án thử nghiệm cuối tuần tốt đẹp chút ít mặc dù. AFAIK không có sự khác biệt trong ngăn xếp, nó chỉ là một phần của bộ nhớ tiếp giáp cho mỗi chủ đề. – Duck