2010-01-31 39 views
21

Không có kinh nghiệm với luồng trong quá khứ, mà kỹ thuật luồng trong C++ sẽ là dễ nhất cho người mới bắt đầu? boost :: thread hoặc pthreads?PThread vs boost :: thread?

+0

Tôi chưa sử dụng, nhưng tôi đã xem tài liệu cho cả hai. Boost là tương thích hơn, nhưng pthread là dễ dàng hơn nhiều để bắt đầu sử dụng. –

+0

Hữu ích: http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/overview/networking/bsd_sockets.html –

Trả lời

33

Đi để tăng :: thread. Đó là closely related cho tác phẩm sắp tới C++ standard threads và giao diện khá dễ sử dụng và thành ngữ đối với C++ (RAII thay vì quản lý tài nguyên thủ công).

9

boost :: thread là một trừu tượng rất đẹp và di động. Tôi chắc chắn sẽ sử dụng nó, nhưng cũng tìm hiểu api thread gốc, như pthreads, để bạn biết cách hoạt động của luồng trên nền tảng của mình.

2

Tôi muốn nói rằng chúng khá gần bằng nhau trong khó khăn. Sự khác biệt lớn duy nhất tôi thấy là PThreads được hỗ trợ khá rộng rãi (nếu bạn quan tâm đến việc chuyển đổi nền tảng chéo). Một điều khác nữa là đã có khá nhiều cuốn sách hay về PThread, mặc dù hầu như tất cả các khái niệm sẽ dịch để tăng :: thread và nhiều thư viện luồng khác.

+1

pthreads chỉ có sẵn trên nền tảng * nix theo mặc định (có sẵn trình bao bọc pthreads) cho Windows trên Sourceforge). Boost là đa nền tảng và được hỗ trợ trên cả * nix và Windows. – jalf

+3

Microsoft cung cấp tiêu đề và thư viện pthread với Dịch vụ cho gói Unix. Đối với Win2K/XP/2003, tải xuống: http://www.microsoft.com/downloads/details.aspx?FamilyID=896C9688-601B-44F1-81A4-02878FF11778 Đối với Vista/7/2008, tính năng: http://technet.microsoft.com/en-us/library/cc771672.aspx –

6

Boost.Thread sử dụng khái niệm RAII để khóa, điều này làm cho mọi thứ ngoại lệ hơn và giúp tránh các lỗi như quên phát hành mutex.

37

Tôi sẽ đi theo hướng ngược lại của mọi người khác - tìm hiểu (hoặc ít nhất là tự làm quen với những gì có sẵn trong) pthreads.

Kể từ khi tăng chủ yếu chỉ là một wrapper xung quanh pthreads (trên nền tảng posix) nó giúp để biết những gì đang xảy ra bên dưới. Trong cố gắng để được chung chung, thúc đẩy lá nền tảng chức năng cụ thể unwrapped. Để có được nó, bạn cần sử dụng các cuộc gọi native_handle(). Để sử dụng các cuộc gọi native_handle(), bạn cần biết nền tảng cung cấp những gì.

Hãy nghĩ nó giống như ổ cắm. Có hàng tá các lớp socket và khung công tác. Nhưng cuối cùng họ bọc API socket của nền tảng cơ bản. Sự hiểu biết của bạn luôn phong phú hơn bằng cách biết điều đó - và biết được những cách thức trừu tượng hóa lớp học của bạn có thể có những sự tụ họp ngắn.

+3

Chức năng cụ thể nào bạn không thể truy cập thông qua Boost? – jalf

+5

@jalf pthread attributes - priority, etc. Bạn có thể nhận được chúng thông qua các lời gọi Thread_handle(), Mutex, vv, nhưng nếu bạn không biết một chút về pthreads bạn có thể không bao giờ biết chúng ở đó để bắt đầu với . – Duck

+1

Điểm công bằng. Chỉ muốn bạn đã đề cập đến họ trong bài đăng. :) Tôi cũng muốn nói rằng hầu hết các ứng dụng không cần phải lo lắng về ưu tiên luồng (hoặc ưu tiên quy trình, cho vấn đề đó). Nhưng bạn nói đúng, nếu và khi các chi tiết này là cần thiết, sự quen thuộc với API cơ bản là rất cần thiết. – jalf

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