autotools cấu hình tập lệnh đa luồng có an toàn không?


0

Trong một configuretập lệnh điển hình được tạo bởi autotools, bạn có loại đoạn này:

eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  tr -d '\r' |
  $SED -n -e "/^boost_lib_version = /{s///;s/\"//g;p;q;}" >conftest.i 2>&1

Điều này hơi phức tạp, nhưng điều quan trọng đối với câu hỏi của tôi, đại khái là:

g++ -E conftest.cpp > conftest.i 2>&1

Bây giờ, đây không phải là đa luồng an toàn phải không?

Bản thân tôi đã thấy một thất bại, trong đó một quá trình Tạo với -jtùy chọn sinh ra nhiều luồng, một trong các luồng đưa ra lỗi tiêu chuẩn một số đầu ra rác và một luồng khác, chạy configuretập lệnh ở trên, sẽ đưa các lỗi từ luồng đầu tiên, vào conftest.i. Tôi đoán điều này là do họ chia sẻ luồng 2 (lỗi tiêu chuẩn), được kế thừa từ quy trình cha.

Ai có lỗi:

  1. Các autotools tạo configuretập lệnh, có lỗi vì chúng tạo mã không an toàn đa luồng? Nhưng điều kỳ lạ là một lỗi đơn giản như vậy sẽ xuất hiện trong một phần mềm trưởng thành như vậy.

  2. Liệu tập lệnh xây dựng sử dụng makefile sử dụng configurecó lỗi không, trong đó nó sử dụng makevới -jntùy chọn? Nhưng điều đó cũng lạ, bởi vì nhiều makefile sử dụng configurecác script và sẽ không hợp lý khi yêu cầu tất cả chúng phải chậm và không sử dụng -jn.

Thất bại ở trên là có thật, tôi đã thấy nó. Tôi nghĩ rằng tôi hiểu cơ chế của sự thất bại. Điều tôi bối rối là, ai có lỗi?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.