2011-08-03 34 views
7

thể trùng lặp:
PThread vs boost::thread?Điểm khác biệt nổi bật trong thư viện Boost Thread hoặc Pthreads là gì?

tôi đã được sử dụng pthreads ví dụ lập trình thư viện kể từ lần tôi đã hiểu những gì đang đa luồng. Cuối cùng tôi đã đi qua thư viện chủ đề Boost trên internet và đã tò mò. Bất cứ ai có thể xác định sự khác biệt nổi bật giữa hai là gì? Có bất kỳ đặc quyền bổ sung suppiled từ Boost, Nếu có thì những gì là những?

Cảm ơn trước, Shraddha

+0

@Code Khỉ: không hẳn là một bản sao, nhưng hầu hết câu trả lời có thể được áp dụng cho câu hỏi này. – akappa

Trả lời

2

Theo kinh nghiệm của tôi thư viện boost :: thread có chức năng gắn rất chặt chẽ với pthreads. Có một số điều được cung cấp trong pthreads bên ngoài thư viện boost :: thread, nhưng vẫn có sẵn trong boost (chẳng hạn như semaphores như được cung cấp trong boost :: interprocess).

Lợi ích chính mà tôi thấy là khả năng [dễ dàng hơn] viết mã đa nền tảng. Kể từ khi thư viện boost :: thread xuất hiện để được triển khai như là một lớp giao diện đa nền tảng cho các hệ điều hành khác nhau, tôi không tin rằng có các tính năng bổ sung đáng kể được tìm thấy trong boost :: thread sẽ không có sẵn trong API hệ điều hành thực tế. Tuy nhiên, trên thực tế, có một số tính năng cơ bản của Windows mà tôi không thể tìm thấy tương đương thực sự, chủ yếu là từ kinh nghiệm của tôi với Win32, và gần như chắc chắn do sự giới hạn của tôi đối với những gì được cung cấp trong cả hai boost :: các thư viện luồng và thư mục pthread.

0

Từ documentation of Boost.Thread:

Boost.Thread cho phép sử dụng nhiều luồng thực hiện với dữ liệu được chia sẻ trong C di ++ mã:

xách tay

pthread là cái gì đó thuộc về unix hệ thống, do đó, mã của bạn sẽ không được di động để (nói) Windows nếu bạn sử dụng chúng trong mã của bạn.

C++

Boost.Thread là một Thư viện C++, trong khi pthread là một thư viện "C": nếu ứng dụng của bạn được viết bằng C++, sau đó bạn có thể tận dụng điều đó để đơn giản hóa mã của bạn (ví dụ đặt Thread s đối tượng trong các thùng chứa hiểu khái niệm Di chuyển).

+0

@celavek: vâng, vậy sao? – akappa

11

Thiết kế của chuỗi tăng :: bị ảnh hưởng mạnh mẽ bởi pthreads, nhưng tất nhiên được tạo kiểu như thư viện C++ thay vì thư viện C. Dưới đây là một số khác biệt mà tôi nghĩ đến. Tôi không tuyên bố đây là danh sách đầy đủ về sự khác biệt.

Những điều pthreads có tăng mà :: đề thiếu:

Khi bạn sử dụng tăng :: sợi bạn có thể lấy các tiềm ẩn pthread_t (hoặc pthread_mutex_t vv) bằng cách gọi hàm native_handle() thành viên và sử dụng chức năng này để lấy lại chức năng không được cung cấp trực tiếp bằng cách tăng :: thread.

  • thông số Set lịch (pthread_attr_setschedparam)
  • truy vấn Stack, thao tác (pthread_attr_getstacksize)
  • Mutex/truy vấn ưu tiên, thao tác (pthread_mutex_getprioceiling)

Những điều thúc đẩy :: thread có mà pthreads thiếu:

Những điều sau đây có thể được thực hiện trong pthreads (sau khi tất cả tăng :: thread được thực hiện trên pthreads). Nhưng không có API rõ ràng và trực tiếp trong số pthreads để thực hiện những việc này.

  • loại khác nhau cho một xử lý chủ đề, và một thread id
  • Một thread id có thể đại diện "không bất kỳ chủ đề"
  • Khả năng khởi động một thread trên một functor tùy ý với lập luận tùy tiện
  • Khả năng "gọi một lần" một functor tùy ý với các đối số tùy ý
  • Khả năng biến điều kiện chờ trên loại khóa tùy ý
  • khả năng khóa nhiều mutexes cùng một lúc mà không bế tắc
  • Một cách cầm tay để lưu trữ chủ đề của id trong container kết hợp
  • hỗ trợ
  • RAII cho mutexes mở khóa
Các vấn đề liên quan