2010-10-31 18 views

Trả lời

17

Có. Điều này đôi khi là một ý tưởng hay nếu bạn có điều kiện riêng biệt mà bạn muốn chờ đợi. Ví dụ, bạn có thể có một hàng đợi và biến điều kiện cho cả hai "không đầy đủ" và "không trống" vv ... Một người nào đó đặt dữ liệu trên hàng chờ đợi "không đầy đủ". Một người nào đó lấy dữ liệu ra khỏi hàng chờ đợi "không trống". Tất cả đều sử dụng cùng một mutex.

+0

Thanks a lot. Bất kỳ liên kết có liên quan nào? – Fanatic23

+0

Google bật ví dụ này: http://cs.wmich.edu/~jjwillia/10.spring/cs4540/asgn2/pthreads-pro-con – xscott

+0

Nhận xét rất muộn, nhưng việc sử dụng 2 condvars với một mutex thực sự được khuyến nghị thực hành ví dụ trường hợp xếp hàng, xem Lập trình Butenhof với Chủ đề Posix '. –

21

Có. Đây là tu tập chung:

điển hình ví dụ:

mutex queue_mutex; 
cond queue_is_not_full_cond; 
cond queue_is_not_empty_cond; 

push() 
    lock(queue_mutex) 
     while(queue is full) 
     wait(queue_is_not_full_cond,queue_mutex); 
     do push... 
     signal(queue_is_not_empty_cond) 
    unlock(queue_mutex) 

pop() 
    lock(queue_mutex) 
     while(queue is empty) 
     wait(queue_is_not_empty_cond,queue_mutex); 
     do pop... 
     signal(queue_is_not_full_cond) 
    unlock(queue_mutex) 
+1

+1 cho mã giả – Fanatic23

Các vấn đề liên quan