2012-02-20 43 views
11

Đối với lớp học của tôi tôi phải tìm hiểu những gì xảy ra với một đoạn mã, và phần tôi đang gặp rắc rối giải mã làCó nghĩa là gì khi "tham gia" một chuỗi?

// joining a thread blocks until that thread finishes 
a.join(); 
b.join(); 

Được tham gia một sợi giống như khóa một sợi? Bởi vì tôi nghĩ rằng điểm của nhiệm vụ này là bạn không được phép để lại chủ đề mở khóa.

Trả lời

30

Đây là cách một luồng chờ hoàn thành một chuỗi khác!

Trường hợp sử dụng đẹp là join là - ví dụ: hàm main() tạo chuỗi và không chờ (sử dụng join) cho chuỗi đã tạo để hoàn thành và chỉ thoát, sau đó chuỗi mới tạo cũng sẽ dừng !

Dưới đây là một số nice explanation về Quản lý chuỗi nói chung và Tham gia chủ đề nói riêng! Và đây là một số code snippets cho bạn thấy một số trường hợp sử dụng của join và những gì sẽ xảy ra khi bạn không sử dụng nó!

+0

Liên kết thực sự tốt cho giải thích !! –

+0

liên kết tuyệt vời, cảm ơn bạn! – Dimesio

5

Nhận xét nói tất cả, thực sự. Tham gia một chuỗi có nghĩa là đợi cho nó hoàn thành. Tức là, chặn luồng hiện tại cho đến khi luồng khác hoàn thành.

3

Hãy nghĩ đến việc bắt đầu một chuỗi là "giả mạo" quy trình của bạn thành hai chuỗi thực thi riêng biệt. Sau đó, tham gia là đảo ngược - đó là nơi hai chủ đề riêng biệt này tham gia với nhau (và chỉ có phụ huynh tiếp tục từ đó).

3

Để tham gia một chuỗi có nghĩa là phải chờ cho đến khi chuỗi đó hoạt động. Khi thoát khỏi chuỗi, chuỗi gọi join() sẽ tiếp tục thực hiện. Vì vậy, trong ví dụ trên, luồng (có lẽ là sợi chính) đang gọi a.join()b.join() sẽ đợi cho đến khi cả hai chủ đề ab (theo thứ tự đó) hoàn thành công việc của họ và sau đó tiếp tục thực thi mã sau b.join().

2
  1. tham gia() đợi trên một chuỗi để hoàn tất quá trình thực thi.
  2. Bạn cần tách() một chuỗi hoặc tham gia() một chuỗi để quản lý nó.
  3. tham gia() cũng làm sạch các tài nguyên bị chiếm hữu luồng. Bạn sẽ tìm thấy join() được gọi trong destructor của một lớp RAII vì cùng một lý do.
Các vấn đề liên quan