Tại sao Pthread_cond_wait cần một mutex?
Tại sao Pthread_cond_wait cần một mutex?

Video: Tại sao Pthread_cond_wait cần một mutex?

Video: Tại sao Pthread_cond_wait cần một mutex?
Video: Andy Wingo - Channels, Concurrency, and Cores: A new Concurrent ML implementation 2024, Có thể
Anonim

Các mutex được sử dụng để bảo vệ chính biến điều kiện. Đó là lý do tại sao bạn nhu cầu nó bị khóa trước bạn làm chờ đợi. Sau đó, khi biến điều kiện được báo hiệu hoặc phát sóng tới, một hoặc nhiều chuỗi trong danh sách chờ sẽ được đánh thức và mutex sẽ được khóa lại một cách kỳ diệu cho chủ đề đó.

Về điều này, Pthread_cond_wait có mở khóa mutex không?

Các pthread_cond_wait () hàm chặn luồng gọi trên biến điều kiện cond, và mở khóa liên kết mutex mutex . Chuỗi cuộc gọi phải bị khóa mutex trước khi chờ vào biến điều kiện. Trở lại từ chức năng, mutex lại bị khóa và thuộc sở hữu của chuỗi gọi.

Sau đó, câu hỏi đặt ra là, tại sao cần có mutex? Nó đảm bảo rằng chỉ có một luồng đang thực thi một đoạn mã khóa tại một thời điểm, điều này sẽ hạn chế quyền truy cập vào cấu trúc dữ liệu. Nó đảm bảo rằng cả hai luồng đều có một cái nhìn đầy đủ và thích hợp về bộ nhớ đó bất kể CPU đang sắp xếp lại thứ tự nào. Các mutex là một điều cần thiết tuyệt đối khi thực hiện lập trình đồng thời.

Ngoài phần trên, tại sao các biến điều kiện lại cần mutex?

Các mutex là được sử dụng để bảo vệ biến điều kiện chinh no. Đó là lý do tại sao bạn nhu cầu nó bị khóa trước bạn làm chờ đợi. Sau đó, khi biến điều kiện là được phát tín hiệu hoặc phát sóng tới, một hoặc nhiều chuỗi trong danh sách chờ sẽ thức dậy và mutex sẽ được khóa lại một cách kỳ diệu cho chủ đề đó.

Tại sao chúng ta cần các biến điều kiện?

Các biến điều kiện cho phép một tập hợp các chủ đề để ngủ cho đến khi nhột! Bạn có thể cù một chủ đề hoặc tất cả các chủ đề đang ngủ. Nếu bạn chỉ đánh thức một luồng thì hệ điều hành sẽ quyết định luồng nào sẽ đánh thức.

Đề xuất: