UPDATE: Jonathan Wakely vui lòng xem xét vấn đề này một he says (below in comments) rằng -pthread
có được thông qua cho cả trình biên dịch và các mối liên kết . Nếu tôi làm điều đó mã không thất bại với gcc 4.7.2 hoặc. Vì vậy, câu trả lời dường như không liên quan gì đến e-mail được trích dẫn. Cảm ơn Jonathan!
Dưới đây là một số dấu ngoặc kép thẳng thành nhà phát triển gcc Jonathan Wakely's mail, được viết vào năm 2011:
Tất cả các toán tử so sánh trên std :: của chúng tôi chủ đề :: id dựa vào hành vi undefined bởi vì thread của chúng ta :: id chỉ là một pthread_t.
[...]
2) toán tử == sử dụng được pthread_equal, mà là undefined cho hợp lệ ID chủ đề, POSIX nói:
If either t1 or t2 are not valid thread IDs, the behavior is undefined.
Mặc dù nó đã được viết cách đây hai năm , nó có thể vẫn áp dụng. Hiện tại tôi không thể kiểm tra mã nguồn gcc để nói nhiều hơn.
Weird. Các mã sau đây:
#include <iostream>
#include <thread>
int main() {
std::cout << "Started" << std::endl;
std::thread::id nobody;
if (nobody != std::this_thread::get_id()) {
std::cout << "OK" << std::endl;
}
std::cout << "Finished" << std::endl;
}
sản xuất:
Started
OK
Finished
Kiểm tra here. Tuy nhiên, mã của bạn không thành công với 4.7.2.
@Ali Có lẽ libstdC++ của anh ấy đã lỗi thời? –