Các phần quan trọng sẽ hoạt động (chúng có trọng lượng nhẹ hơn mà mutexes.) InitializeCriticalSection, EnterCriticalSection, LeaveCriticalSection và DeleteCriticalSection là các chức năng tìm kiếm trên MSDN.
void func()
{
// cs previously initialized via InitializeCriticalSection
EnterCriticalSection(&cs);
operation1();
operation2();
LeaveCriticalSection(&cs);
operation3();}
}
EDIT: Phần quan trọng là nhanh hơn so với mutexes từ bộ phận quan trọng chủ yếu là chế độ người dùng nguyên thủy - trong trường hợp của một Acquire uncontended (thường là trường hợp phổ biến) không có cuộc gọi hệ thống vào hạt nhân, và mua mất theo thứ tự của hàng chục chu kỳ. Một chuyển đổi hạt nhân là đắt hơn (theo thứ tự của hàng trăm chu kỳ). Phần thời gian quan trọng chỉ gọi vào hạt nhân là để chặn, trong đó bao gồm chờ đợi trên một nguyên thủy hạt nhân, (hoặc mutex hoặc sự kiện). Nhận được một mutex luôn luôn liên quan đến một cuộc gọi vào hạt nhân, và do đó đơn đặt hàng của cường độ chậm hơn. Tuy nhiên, các phần quan trọng chỉ có thể được sử dụng để đồng bộ hóa tài nguyên trong một quy trình. Để đồng bộ hóa qua nhiều quy trình, cần có một mutex.
Đúng cho đến nay, nhưng theo như tôi biết CriticalSections sử dụng mutexes nội bộ, do đó không có lợi ích hiệu suất. –
Và sau đó cho an toàn ngoại lệ, bạn có thể bọc cs vào một lớp; xem RAII. – Reunanen
(Vì câu hỏi là về C++.) – Reunanen