Để trích dẫn trang người đàn ông:
Khi sử dụng các biến điều kiện, luôn có một biến vị ngữ Boolean liên quan đến các biến được chia sẻ liên quan đến từng điều kiện chờ đó là đúng nếu luồng nên tiến hành. Đánh thức giả từ các hàm pthread_cond_timedwait () hoặc pthread_cond_wait () có thể xảy ra. Vì trả về từ pthread_cond_timedwait () hoặc pthread_cond_wait () không ngụ ý bất cứ điều gì về giá trị của vị từ này, nên vị từ được đánh giá lại khi trả về như vậy.
Vì vậy, pthread_cond_wait
có thể trở lại ngay cả khi bạn không báo hiệu nó. Thoạt nhìn ít nhất, điều đó có vẻ khá tàn bạo. Nó sẽ giống như một hàm trả lại ngẫu nhiên giá trị sai hoặc trả về ngẫu nhiên trước khi nó thực sự đạt được một tuyên bố trả về thích hợp. Có vẻ như một lỗi lớn. Nhưng thực tế là họ đã chọn ghi lại điều này trong trang người đàn ông thay vì sửa nó dường như cho thấy rằng có một lý do chính đáng tại sao pthread_cond_wait
cuối cùng lại thức dậy một cách giả tạo. Có lẽ, có một cái gì đó nội tại về cách thức hoạt động của nó khiến nó không thể được giúp đỡ. Câu hỏi là gì.
Tại sao không pthread_cond_wait
trở spuriously? Tại sao nó không thể đảm bảo rằng nó sẽ chỉ thức dậy khi nó được báo hiệu đúng? Bất cứ ai có thể giải thích lý do cho hành vi giả mạo của nó?
pthread_cond_(timed)wait
: "Nếu tín hiệu được gửi ... luồng sẽ tiếp tục chờ biến điều kiện như thể nó là không bị gián đoạn, hoặc nó sẽ trả về 0 do đánh thức giả ". Các chức năng chặn khác cho biết EINTR
khi bị gián đoạn bởi tín hiệu (ví dụ read
) hoặc được yêu cầu tiếp tục (ví dụ pthread_mutex_lock
). Vì vậy, nếu không có lý do nào khác để đánh thức giả, pthread_cond_wait
có thể đã được định nghĩa giống như một trong những lý do đó.