Tôi đang sử dụng boost::interpocess::scoped_lock
bằng cách sử dụng named_mutex
và timeout
; Tôi đang chạy trong hệ điều hành Linux.thúc đẩy quá trình liên kết có tên mutex vẫn được mua sau khi xảy ra sự cố
Trong một trong các thử nghiệm của tôi, tôi đã gặp sự cố: từ đó, mỗi lần tôi thử chạy lại ứng dụng, nó bị kẹt ở điểm tôi tạo khóa; có vẻ như mutex vẫn có được một số cách (không có quá trình nào có thể sử dụng nó đang chạy).
Trên hết, nếu bạn nhìn vào mã bên dưới, tôi mong đợi rằng sau 150 micro giây, thời gian scoped_lock
trả về để cho tôi một lỗi .. nhưng đây không phải là trường hợp .. nó chỉ treo ở đó.
#include <boost/interprocess/sync/named_mutex.hpp>
namespace bi = boost::interprocess;
bi::named_mutex m_mutex;
try{
boost::posix_time::ptime pt(
boost::posix_time::microsec_clock::local_time()) ;
pt+= boost::posix_time::microseconds(150);
bi::scoped_lock<bi::named_mutex> lock(m_mutex, pt);
if(!lock.owns()){
FATAL("I didn't acquire the lock.");
return EXIT_FAILURE;
}
....
Câu hỏi của tôi như sau:
- Làm thế nào để đảm bảo rằng
boost::interprocess
tên mutex bị phá hủy? (do đó, làm thế nào để xem mutex được chia sẻ qua các quy trình và cách tiêu diệt chúng) - Tại sao có được mutex không trả về sau 150 micro giây? Có bất cứ điều gì sai trái trong đoạn code dưới đây không?
Thanks a lot
AFG
Trong trường hợp của tôi, nó vẫn được mua trên Windows –