2015-06-09 12 views
7

tôi sử dụng std::mutexstd::lock_guard một cách đúng đắn RAII suốt ứng dụng của tôi:std :: mutex :: khóa bị lỗi trên Windows, mã lỗi 3

struct Foo { 
    int f() const 
    { 
     std::lock_guard<std::mutex> locker(m_mutex); 
     return m_i; 
    } 
private: 
    int m_i = 0; 
    mutable std::mutex m_mutex; 
}; 

Nó luôn luôn làm việc, nhưng tôi đã thêm song song với một nhiều lớp học hơn, và trong lớp học mới này locker ném std::system_error. Vấn đề là ở đây (xthread tiêu đề):

inline int _Mtx_lockX(_Mtx_t *_Mtx) 
{ // throw exception on failure 
    return (_Check_C_return(_Mtx_lock(_Mtx))); 
} 

_Mtx_lock lợi nhuận 3 trong khi giá trị dự kiến ​​là 0. Không có ý tưởng gì 3 phương tiện.

VS2013, v120_x64 runtime.

+3

bài viết mã mà instantiates mutex. –

+0

@WernerErasmus: mở rộng câu hỏi. –

+0

Cung cấp cho chúng tôi đủ mã để tái tạo sự cố. Hoặc kiểm tra ngăn xếp cuộc gọi khi xảy ra lỗi và có thể hiển nhiên. –

Trả lời

6

Các lỗi như đã đề cập bởi @Phantom (_Thrd_busy) ngụ ý rằng các khóa đã được thực hiện một cách đệ quy. Cũng thấy điều này answer

+3

Vậy đó, việc chuyển sang 'std :: recursive_mutex' đã giải quyết được vấn đề! Tôi có lẽ nên refactor mã của tôi để tránh khóa đệ quy. –

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