2012-12-19 27 views
8

Tôi tạo khoảng 300 chuỗi tăng trong một quy trình. Có cách nào để tham gia một chuỗi cụ thể dựa trên id luồng không?Tham gia một chủ đề tăng cụ thể

+3

Bạn quản lý các chủ đề đó bằng cách nào? (Bạn bằng cách nào đó nhớ các chủ đề bắn ra, làm bạn?) –

Trả lời

9

Thiên đường phụ thuộc vào cách bạn lưu boost::thread s. Nếu bạn lưu chúng trong một container (với T = boost::thread*), bạn chỉ có thể sử dụng giống như

for(iterator it = ctn.begin(); it != ctn.end(); ++it){ 
    if(it->get_id() == join_thread_id){ 
     it->join(); 
     break; 
    }   
} 

Tuy nhiên, nếu bạn không lưu chủ đề của bạn ở đâu đó và chỉ sử dụng new boost::thread mà không lưu con trỏ đó là không thể vì tăng doesn không cung cấp bất kỳ chức năng kế toán tự động nào.

1. Lưu ý: Hãy nhớ rằng bạn cần phải sử dụng boost::thread::id để lưu id.
2. Ghi chú: std::map<boost::thread::id,boost::thread*> có thể hữu ích cho các tác vụ như vậy.

+1

hoặc 'find_if (bắt đầu (ctn), kết thúc (ctn), [join_thread_id] (iterator nó) {return it-> get_id() == join_thread_id;}); ' –

+0

Nếu có nhiều chủ đề, không tốt hơn bản đồ ?. Tôi hỏi điều này với hiệu suất trong tâm trí. –

+0

@ AdriC.S .: Nó phụ thuộc vào ý nghĩa của 'rất nhiều'. Một bản đồ có quy mô đẹp với số lượng đối số (độ phức tạp tra cứu tuyến tính phụ), nhưng tùy thuộc vào số lượng mặt hàng thực tế, một vectơ nhỏ có thể hoạt động tốt hơn một bản đồ nhỏ. –

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