Şu anda BeagleBoard (ARM tabanlı işlemci) üzerinde bir yapılandırma dosyası ayrıştırmak için boost::program_options
kullanıyorum. Programım çok iş parçacıklı ve boost 1.45 multithreaded
kitaplıklarına bağlı.boost :: program_options "bazen" kolunda kilitleniyor
Programım sadece
namespace po = boost::program_options;
po::options_description desc("Options");
uint32_t option1=0;
std::vector<std::string> optionsString;
std::cout<<"Before adding options"<<std::endl;
desc.add_options()
("option1",
po::value<uint32_t>(&option1), "...")
("finaloption",
po::value<std::vector<std::string> >(&optionsString)->multitoken(), "string of options");
//Never gets here
std::cout<<"After adding options"<<std::endl;
po::variables_map vm;
std::cout<<"Starting program"<<std::endl;
programı "seçenekleri ekledikten sonra" dışarı yazdırmadan önce asılı olsa yapılandırma dosyası ayrıştırılırken askıda gibi görünüyor. Eğer programı gdb ile çalıştırırsam durdurur ve bir geri izler yaparsam, "Asla buraya gelmez" yorumundan önce satırda olduğunu gösterir. backtrace üst sadece
#0 ??
#1 __lll_lock_wait lowlevellock.c:47
#2 __pthread_mutex_lock pthread_mutex_lock.c:61
#3 in boost::shared_ptr<boost::program_options::option_description>* std::__uninitialized_move_a<boost::shared_ptr<boost::program_options::option_description>*, boost::shared_ptr<boost::program_options::option_description>*, std::allocator<boost::shared_ptr<boost::program_option::option_description> > >(boost::shared_ptr<boost::program_optionns::option_description>*, boost::shared_ptr<boost::program_options::option_description>*, std::allocator<boost::shared_ptr<boost::program_options::option_description> >&)() from /usr/local/lib/libboost_program_options-mt.so.1.45.0
#4 in std::vector<boost::shared_ptr<boost::program_options::option_description>, std::allocator<boost::shared_ptr<boost::program_options::option_description> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<boost::shared_ptr<boost::program_options::option_description>, std::vector<boost::shared_ptr<boost::program_options::option_description>, std::allocator<boost::shared_ptr<boost::program_options::option_description> const&)() from /usr/local/lib/libboost_program_options-mt.so.1.45.0
#5 in boost::program_options::options_description::add(boost::shared_ptr<boost::program_options::option_description>)() from /usr/local/lib/libboost_program_options-mt.so.1.45.0
adresten var ...
Herhangi düşünceler (daha fazlasını isterseniz bana bildirin)? Bu program bir x86 makinasında düzgün çalışıyor.
Düzenleme: Daha fazla bilgi, bu, en iyi duruma getirme işlemleriyle gerçekleşmez (-O2 ile derlenmiş, bu oldukça tutarlı bir şekilde gerçekleşir).
Edit2: Daha fazla analiz, bunun hala optimizasyonlar kapalıyken gerçekleştiğini ortaya çıkarır, -O0.
# 2'den sonra backtrace çıktılarını gösterebiliyor musunuz? –
Seçenek adında neden boşluk var? –
Hangi iş parçacığının kilit tuttuğunu görün ve bu iş parçacığının şu anda ne yaptığına bakın. Ayrıca, kilidinizi çöp kutusuna yazdırabilir ve/veya başlatılmamış kilit yapısı kullanıyor olabilirsiniz. – PlasmaHH