2009-08-19 28 views
8

Một câu hỏi về chủ đề trong C/C++ ...Chủ đề trong C, C++, C++ 0x, pthread và thúc đẩy

C++ 0x cú pháp

#include <thread> 

void dummy() {} 

int main(int, char*[]) { 
    std::thread x(dummy); 
    std::thread y(dummy); 
    ... 
    return 0; 
} 

Có bao nhiêu bài là ở đó? Hai (x và y) hoặc ba (x, y và chính)? Tôi có thể gọi số this_thread::yield() chính không? Và tôi nhận được gì khi gọi this_thread::get_id() trong chính?

cú pháp pthread

#include <pthread.h> 

void dummy() {} 

int main(int, char*[]) { 
    pthread_t x, y; 
    pthread_create(&x, NULL, &dummy, NULL); 
    pthread_create(&y, NULL, &dummy, NULL); 
    ... 
    return 0; 
} 

Có bao nhiêu bài nào nữa? Hai (x và y) hoặc ba (x, y và chính)? Tôi có thể gọi số pthread_yield() chính không? Và tôi nhận được gì khi gọi số pthread_self() trong chính?

tăng cú pháp

#include <boost/thread> 

void dummy() {} 

int main(int, char*[]) { 
    boost::thread x(dummy); 
    boost::thread y(dummy); 
    ... 
    return 0; 
} 

Có bao nhiêu bài nào nữa? Hai (x và y) hoặc ba (x, y và chính)? Tôi có thể gọi số boost::this_thread::yield() chính không? Và tôi nhận được gì khi gọi số boost::this_thread::get_id() trong chính?

+2

Trong ví dụ bảo mật bạn đã viết pthread_t x, t; sau đó bạn dùng x, y; Typo tôi đoán vậy. –

Trả lời

25

Trong mỗi trường hợp bạn đã tạo hai chuỗi bổ sung để bạn có ba (x, y và chính). Bạn sẽ nhận được một id khác nhau trên mỗi chủ đề bao gồm một cuộc gọi trong chính.

+1

Thật hiếm khi một câu hỏi lớn được trả lời ngắn gọn. –

+8

Không thực sự: đó là ba lần cùng một câu hỏi như phiên bản tăng cường là một thực hiện một trong những tiêu chuẩn tương lai một (c + + 0x) mà là dựa trên một posix ... – Klaim

0

Chủ đề chính luôn ở đó và bạn tạo thêm chủ đề mới. Nếu chủ đề chính chết, bạn chết chương trình hoặc hành vi không được xác định. Nó cũng có thể bắt đầu với rất nhiều chủ đề khi thời gian chạy có thể bắt đầu (và thường sẽ - giống như các chủ đề linux_threads "pthreads" implemenation) trên đó sở hữu.

Gọi năng suất luôn luôn có thể vì nó chỉ nói với os rằng nó có thể cung cấp cho phần còn lại của thời gian lát để sợi khác nếu có bất kỳ một với cùng một hoặc cao hơn ưu tiên. Nếu bạn không viết các tính năng đồng bộ hóa mức thấp như spinlocks thì không có lý do thực sự nào để gọi năng suất trong ứng dụng của bạn.

0

Tất cả ba triển khai trên đều cho kết quả tương tự. Như std :: thread được thực hiện trên đầu trang của 'pthread' nên tất cả sẽ tạo ra ba luồng. Chính sẽ là chủ đề cha của bạn và những người khác sẽ trở thành chủ đề con và có ID khác nhau khi mỗi thread được tạo ra và tăng :: thread được tạo ra bởi cùng một tác giả như std :: thread nhưng thêm một số cải tiến.