2009-07-21 16 views
7

Tôi đã tìm thấy bài viết sau: Use GCC-provided atomic lock operations to replace pthread_mutex_lock functionsGCC Atomic Builtins thay vì pthread?

Nó đề cập đến GCC Atomic Builtins.

Bài viết đề xuất, là sử dụng nội dung nguyên tử GCC thay vì các công cụ đồng bộ hóa pthread.

Đây có phải là một ý tưởng hay không?

PS. Bài đăng mysql rõ ràng là gây hiểu nhầm. Atomic Builtins không thể thay thế tất cả các công cụ pthread. Ví dụ, khóa yêu cầu, rằng nếu một khóa không thể có được, một sợi phải đợi. Nói cách khác, nó yêu cầu hệ điều hành chờ đợi, để chờ đợi là thụ động. Xây dựng GCC đơn giản không thể làm điều đó.

Trả lời

5

Đây có phải là một ý tưởng tốt?

Không nếu bạn có ý định biên dịch mã bằng thứ gì đó khác với gcc. Là pthreads gây ra cho bạn bất kỳ vấn đề cụ thể?

+0

Không có vấn đề với pthreads, chỉ cần tự hỏi nếu nó sẽ được bổ ích để chuyển sang những người xây dựng GCC. Tôi sẽ luôn biên dịch bằng cách sử dụng GCC, không có cơ hội để thay đổi điều này. –

+1

"Nếu nó không bị hỏng, đừng sửa nó" là phương châm của tôi. –

+0

Các nội trang này được Intel xác định, như trang đề cập; Tôi hy vọng họ cũng làm việc trên các trình biên dịch khác. – CesarB

1

No. GCC được xây dựng trong có thể có ý nghĩa tốt cho những người viết hệ điều hành, libc, và có lẽ pthreads chính nó, nhưng đối với ứng dụng trung bình của bạn không có lý do không sử dụng cách tiếp cận pthreads.

Và ngay cả khi bạn luôn sử dụng GCC, một số ngày bạn có thể muốn chạy một công cụ phân tích tĩnh sẽ không xử lý tất cả các phần mở rộng GCC của khách hàng.

2

Nếu bạn đang sử dụng pthread, và chức năng khóa pthread đã làm những gì bạn muốn, tốt nhất là sử dụng các chức năng khóa pthread.

Các nội trang nguyên tử này chỉ là các khối xây dựng cho các nguyên thủy cấp cao hơn; viết các nguyên thủy cấp cao hơn này có xu hướng phức tạp, và bất kỳ sai lầm nào cũng có thể gây ra các lỗi có thể mất nhiều thời gian để hiển thị (vì chúng thường phụ thuộc vào thời gian). Nếu bạn đã có một thư viện với các nguyên thủy cấp cao hơn làm những gì bạn muốn và đủ nhanh cho nhu cầu của bạn (và đừng cho rằng chúng quá chậm chỉ vì bạn phải thực hiện một cuộc gọi hàm), tốt nhất là không nên tái tạo lại bánh xe.

0

nội trang nguyên tử có ý nghĩa nếu bạn muốn cải thiện hiệu suất. Builtins cho phép bạn giảm thiểu tranh chấp gây ra bởi việc serialization mutexes. Khi bạn sử dụng mutexes và tạo ra một phiên quan trọng bạn serialize quyền truy cập vào phần đó của mã của bạn; trong mã hiệu suất, bạn có thể muốn tránh tranh chấp bằng cách sử dụng dữ liệu cụ thể theo luồng và khi không thể sử dụng nguyên tử. Trường hợp cuối cùng là khóa và khi khóa, giảm thiểu thời gian khóa khóa (sử dụng tính năng nhắn tin và kiểm tra khóa kép mặc dù một số yêu cầu không hoạt động - hoạt động với tôi).