Giả sử bạn có mã nàyTại sao bạn cần một vòng lặp while trong khi chờ đợi một biến trạng
pthread_mutex_lock(&cam->video_lock);
while(cam->status == WAIT_DISPLAY) // <-- Why is this a 'while' and not an 'if'?
pthread_cond_wait(&cam->video_cond, &cam->video_lock);
pthread_mutex_unlock(&cam->video_lock);
Câu hỏi của tôi là, tại sao bạn cần một vòng lặp trong khi ở đây. Sẽ không pthread_cond_wait chỉ cần đợi cho đến khi tín hiệu chỉ báo tín hiệu cam_video_cond? OK, tôi biết bạn có thể có một trường hợp CAM-> Tình trạng không bằng WAIT_DISPAY khi pthread_cond_wait được gọi, nhưng trong trường hợp đó bạn chỉ có thể kiểm tra xem nó thông qua một nếu điều kiện hơn là sử dụng khi.
Tôi có thiếu gì đó ở đây không? Sự hiểu biết của tôi về pthread_cond_wait là nó chỉ đợi vô hạn nếu cam_video_cond không được báo hiệu. Hơn nữa, nó mở khóa các cam_video_lock mutex khi được gọi, nhưng khi điều kiện được báo hiệu, trước khi trở về, nó sẽ chuyển đổi cam_video_lock. Tôi có đúng không?
Cùng một câu hỏi tại đây, http://www.unix.com/programming/149791-condition-variables.html – MetallicPriest
[Báo thức giả] (http://en.wikipedia.org/wiki/Spurious_wakeup) –