2015-09-28 18 views
7

Từ kinh nghiệm của tôi, dường như là kết quả củaLà std :: thread :: id duy nhất trên các quy trình?

std::this_thread::get_id() 

là duy nhất trên quá trình: id là khác nhau từ một quá trình khác.

Điều này có được đảm bảo theo tiêu chuẩn không?

+0

Bạn có yêu cầu cụ thể cho gcc trên Linux ngay bây giờ hoặc cho C++ nói chung không? Các câu trả lời dường như khác nhau. – nwp

+0

Câu hỏi của tôi là về tiêu chuẩn C++ nói chung. Tôi đang tìm kiếm một câu trả lời trên tất cả các nền tảng và tất cả các trình biên dịch. –

+5

Tiêu chuẩn không có bất kỳ khái niệm nào về "quy trình", bất kỳ khái niệm nào về việc một số chương trình có thể chạy đồng thời và tương tác. Vì vậy, câu hỏi thậm chí không thể được xây dựng trong các điều khoản tiêu chuẩn, hãy để một mình trả lời. Tất cả những gì bạn có thể hỏi là "thực hiện điển hình sẽ làm gì?" –

Trả lời

1

std :: chuỗi được triển khai trên đầu trang của pthread trong môi trường hỗ trợ pthreads. Vì vậy, nó trở thành không có (di động) đảm bảo.

Từ pthread_self dẫn sử dụng:

ID Chủ đề được đảm bảo là duy nhất chỉ trong một quá trình. Một
ID luồng có thể được sử dụng lại sau khi một chuỗi đã chấm dứt đã được kết hợp hoặc một luồng tách rời đã chấm dứt.

+3

Điều này không trả lời câu hỏi về tiêu chuẩn C++, nó chỉ có nghĩa là nếu tiêu chuẩn C++ yêu cầu ID luồng là duy nhất trên các quy trình, việc triển khai không thể đơn giản sử dụng lại ID pthread. (Nhưng nó làm cho nó có khả năng rằng C + + tiêu chuẩn không yêu cầu ID thread là duy nhất trên các quy trình.) – hvd

+0

@hvd có, nhưng std :: thread được thực hiện trên đầu trang của pthreads trong một môi trường hỗ trợ pthreads. Vì vậy, nó trở thành không có (di động) đảm bảo. – PSIAlt

+2

Bạn có thể thêm một nguồn cho ngao mà 'std :: thread' được cài đặt ở đầu trang pthreads khi có sẵn không? Tôi không thể tưởng tượng được tiêu chuẩn đòi hỏi điều này.Tôi cũng khá chắc chắn rằng Windows là một counterexample, bởi vì pthreads có sẵn và không được sử dụng để thực hiện 'std :: thread', cả hai đều sử dụng bản cài đặt WinApi riêng để thay thế. Nhưng sau đó một lần nữa nó sẽ không phải là lần đầu tiên Microsoft không tuân thủ tiêu chuẩn. – nwp

2

Người được cấp tiêu chuẩn rằng id chủ đề là duy nhất trên các chủ đề khác nhau, nó cũng cho biết rằng id chuỗi đã chấm dứt có thể được sử dụng lại. Nó không chỉ rõ quy trình và không thừa nhận sự tồn tại của chúng, do đó, nó không đảm bảo tính duy nhất trong các quá trình.

30.3.1.1

  1. Một đối tượng của loại chủ đề :: id cung cấp một định danh duy nhất cho mỗi sợi thực hiện và một giá trị khác biệt duy nhất cho tất cả các chủ đề đối tượng mà không đại diện cho một sợi thực hiện (30.3.1). Mỗi thread của thực hiện có một chủ đề liên quan :: id đối tượng đó là không tương đương với các chủ đề :: id đối tượng của bất kỳ chủ đề khác của thực hiện và đó không phải là bằng thread :: id đối tượng của bất kỳ std :: thread đối tượng không đại diện cho các chuỗi thực thi.
  2. chủ đề :: id phải là một lớp có thể sao chép đáng kể (Điều 9). Thư viện có thể sử dụng lại giá trị của một chuỗi :: id của một chuỗi đã kết thúc mà không còn có thể được nối.

Tiêu chuẩn này cũng ẩn đi việc triển khai chuỗi :: id, nó có thể là int hoặc cái gì đó khác.

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