簡體   English   中英

通過鎖定互斥鎖進行分段錯誤

[英]Segmentation fault by locking a mutex

我在這里問你的意見。 我是一個大項目的新手,所以我將嘗試描述一個簡單的示例。

頂部回溯是

#0  0xb6adfc6d in pthread_mutex_lock () from /usr/lib/libpthread.so.0
#1  0x080d8565 in boost::mutex::lock() ()
#2  0x080d8613 in boost::unique_lock<boost::mutex>::lock() ()
#3  0x080d8642 in boost::unique_lock<boost::mutex>::unique_lock(boost::mutex&)
#4  0x...      in ???    //just ??? in stack
#5  0x...      in ???
#6  0x...      in ???

似乎互斥體不存在,但是它是在類構造器中創建的。 例:

class A
{
  boost::mutex::scoped_lock mutex_;
public:
  A(): mutex_() {}

  void Read (...)
  {
    //some checks
    boost::mutex::scoped_lock lock(mutex_); // <-- Segfault
    //read
  }

  void Write (...)
  {
    //some checks
    boost::mutex::scoped_lock lock(mutex_);
    //write
  }
};

對我來說,這很奇怪,因為我不知道發生段隔離的原因或根本原因的可能方法。 我很高興聽到您對此的任何建議。

好像您正在作用域鎖定作用域鎖定-可能是拼寫錯誤

隨機示例用法: http : //www.boost.org/doc/libs/1_53_0/libs/thread/example/mutex.cpp

通常的模式是使用scoped_lock類定義互斥鎖的范圍

boost::recursive_mutex mutex;
void somefunc() {
    boost::unique_lock<boost::recursive_mutex> scoped_lock(mutex);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM