Nếu tôi muốn lấy nhiều ổ khóa mà không cần chạy các nguy cơ bế tắc, tôi có thể sử dụng chức năng std::lock
:Tại sao không hỗ trợ hết thời gian chờ trong std :: lock?
int data1, data2;
std::mutex m1, m2;
std::unique_lock<std::mutex> lock1(m1, std::defer_lock);
std::unique_lock<std::mutex> lock2(m2, std::defer_lock);
std::lock(lock1, lock2); // guaranteed deadlock-free
// work with data1 and data2
Nhưng nếu tôi muốn để có được khóa trong một thời hạn nhất định và thời gian chờ khác? Có lý do nào không có gì giống như try_until
cho các khóa tương tự như wait_until
cho các biến tương lai và điều kiện không?
'std :: lock' không phải là một loại, [đó là hàm] (http://en.cppreference.com/w/cpp/thread/lock). :) – Xeo
@Xeo: Phải, cảm ơn. Đã chỉnh sửa. – KnowItAllWannabe
@Nicol: Có vấn đề gì khi truyền các khóa hoãn lại? 'std :: lock' chấp nhận bất kỳ loại khóa nào và bạn sẽ không phải lo lắng về việc mở khóa sau này. – Xeo