Bạn sử dụng một mutex để đảm bảo rằng chỉ có một luồng thực thi có thể truy cập vào một thứ gì đó. Ví dụ, nếu bạn muốn cập nhật một danh sách có khả năng có thể được sử dụng bởi nhiều chủ đề, bạn muốn sử dụng một mutex:
acquire mutex
update list
release mutex
Với một mutex, chỉ có một thread tại một thời điểm có thể thực hiện các "danh sách cập nhật ".
Bạn sử dụng sự kiện đặt lại thủ công nếu bạn muốn nhiều chủ đề chờ đợi điều gì đó xảy ra trước khi tiếp tục. Ví dụ: bạn đã bắt đầu nhiều chuỗi, nhưng tất cả chúng đều bị tạm dừng chờ một số sự kiện khác trước khi chúng có thể tiếp tục. Khi sự kiện đó xảy ra, tất cả các chủ đề có thể bắt đầu chạy.
Các chủ đề chính sẽ trông như thế này: Mã
create event, initial value false (not signaled)
start threads
do some other initialization
signal event
của mỗi chủ đề sẽ là:
do thread initialization
wait for event to be signaled
do thread processing
Nguồn
2011-08-02 14:40:29
giá trị ban đầu của mutex: tín hiệu hoặc không được báo hiệu là gì? – yeap
@yeap: Trong hầu hết các trường hợp, bao gồm cả trường hợp này, bạn muốn tạo mutex để ban đầu nó không được mua lại. –
Một khác biệt quan trọng là một mutex có thể bị khóa nhiều lần bởi cùng một luồng (nó là "đệ quy") trong khi một sự kiện có thể được sử dụng để thực hiện khóa không đệ quy. –