دفعة الموضوع خطأ برنامج التحويل البرمجي مع دول مجلس التعاون الخليجي

StackOverflow https://stackoverflow.com/questions/622402

سؤال

على لينكس دول مجلس التعاون الخليجي 4.3, تجميع فئة مع دفعة::موضوع تنفيذ mutexes / حالة المتغيرات أحصل على بعد خطأ غريب ، على ما يبدو بسبب نوع الصراعات مع posix الموضوع مكتبة:

*Compiling: filter.cpp
/usr/include/boost/thread/condition.hpp: In member function »void boost::condition::wait(L&) [with L = boost::mutex]«:
/host/.../filter.cpp:68:   instantiated from here
/usr/include/boost/thread/condition.hpp:90: Error: no match für »operator!« in »!lock«*
*/usr/include/boost/thread/condition.hpp:90: Notice: candidates are: operator!(bool) <built in>*
*/usr/include/boost/thread/mutex.hpp:66: Error: »pthread_mutex_t boost::mutex::m_mutex« is private
/usr/include/boost/thread/condition.hpp:93: Error: in this context*

رمز:

void CFilter::process( CData **s )
{
    boost::mutex::scoped_lock bufferLock(m_mutex);
    while (!m_bStop)
        m_change.wait(bufferLock);                      //<- line 68

    // ... further processing
}

مع الطبقة الإعلان

#include <boost/shared_ptr.hpp>
#include <boost/bind.hpp>
#include <boost/thread/condition.hpp>
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>

class CFilter
{
    // ...
    boost::shared_ptr<boost::thread> m_thread;
    boost::mutex m_mutex;
    boost::condition m_change;
    // ...

    process( CData **s );
}

المشغل خطأ يحدث في تعزيز حالة.hpp ،

if (!lock)
    throw lock_error();

أنا باستخدام دفعة 1.38.0 ، على ويندوز أنا لا أجد أي مشاكل.أي مساعدة هي موضع تقدير!

هل كانت مفيدة؟

المحلول

يجب الانتظار على bufferLock, لا m_mutex:

while (!m_bStop)
    m_change.wait(bufferLock);

الشرط<>::انتظر() يأخذ ScopedLock كما المعلمة لا Mutex.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top