2011-09-08 13 views
5

Khi mutex trong hầu hết các hệ thống được thực hiện bằng cách sử dụng CAS ops, tôi đã tự hỏi về so sánh hiệu suất của hai cấu trúc này.try-lock cuộc gọi mutex và các cuộc gọi CAS

Có công bằng khi nói rằng nếu một mutex được thực hiện bằng cách sử dụng CAS, sau đó cuộc gọi thử khóa trên mutex đó sẽ giống nhau/hiệu suất tương tự so với các hoạt động CAS?

CAS, phụ thuộc vào hệ thống cao, tôi đã suy nghĩ nếu nó có thể được thay thế bằng một cách phổ biến hơn/bắt nguồn từ tiêu chuẩn hóa, mutex try-lock.

Trả lời

4

Lý do của bạn là hợp lý; trên bất kỳ việc thực hiện lành mạnh nào, chi phí của một hoạt động "trylock" sẽ gần giống như một CAS. Tuy nhiên, CAS nói chung không thể được thay thế bằng trylock; trylock là một nguyên thủy yếu hơn mà không thể thao tác dữ liệu tùy ý.

2

Không công bằng khi nói bất kỳ điều gì về hiệu suất tương đối của CAS so với khóa. Hệ điều hành khác nhau thực hiện khóa theo những cách rất khác nhau. Win32 cần phải chuyển ngữ cảnh sang kernel chậm, Linux có mutexes không gian người dùng. Việc thực hiện cũng sẽ thay đổi rất nhiều tùy thuộc vào cách contended phần quan trọng là. Bạn cũng cần phải xem xét những gì bạn đang làm trong phần quan trọng, là bạn tăng một số nguyên hoặc làm một hoạt động phức tạp? Vì vậy, có nhiều biến mà đi vào hiệu suất tương đối và bạn không thể đưa ra tuyên bố rộng về nó.

Tôi khuyên bạn nên sử dụng ngôn ngữ/nền tảng của mình dễ nhất để sử dụng tính trừu tượng hóa khóa. Đo lường hiệu suất và xem liệu nó có được chấp nhận cho bạn hay không.

+0

Win32 có mutex không gian người dùng ('CriticalSection's), đó chỉ là vấn đề về thuật ngữ. –