我不明白为什么下面的代码导致分段错误。成员互斥导致SegFault
如果我删除了对pushLock.lock()和.unlock()的调用,它运行良好。
#include <mutex>
#include <queue>
class FunctionQueue{
public:
FunctionQueue();
~FunctionQueue();
void pushInt(int);
private:
std::mutex pushLock;
int currentPushQueue;
std::queue<int> instructionQueues[2];
};
FunctionQueue::FunctionQueue(){
instructionQueues[0] = std::queue<int>();
instructionQueues[1] = std::queue<int>();
// pushLock.unlock();
}
FunctionQueue::~FunctionQueue(){}
void FunctionQueue::pushInt(int newArgument){
pushLock.lock();
instructionQueues[currentPushQueue].push(newArgument);
pushLock.unlock();
}
int main(int argc, char* argv[]){
FunctionQueue testQueue;
testQueue.pushInt(10);
}
从GDB回溯输出是非常无益的:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ??()
(gdb) bt
#0 0x0000000000000000 in ??()
#1 0x00007ffff347a291 in ??() from /lib/x86_64-linux-gnu/libdl.so.2
#2 0x00007ffff347a6d7 in ??() from /lib/x86_64-linux-gnu/libdl.so.2
#3 0x00007ffff347a198 in dlsym() from /lib/x86_64-linux-gnu/libdl.so.2
#4 0x00007ffff7904b3e in ??() from /usr/lib/nvidia-331/libGL.so.1
#5 0x00007ffff78e8db4 in ??() from /usr/lib/nvidia-331/libGL.so.1
#6 0x00007ffff7dea0fd in ??() from /lib64/ld-linux-x86-64.so.2
#7 0x00007ffff7dea223 in ??() from /lib64/ld-linux-x86-64.so.2
#8 0x00007ffff7ddb30a in ??() from /lib64/ld-linux-x86-64.so.2
#9 0x0000000000000001 in ??()
#10 0x00007fffffffe8a6 in ??()
#11 0x0000000000000000 in ??()
任何帮助,您可以给将是极好的。
在此先感谢。
'currentPushQueue'哪来的初始化? – Jepessen
你用'-pthread'编译了吗? –
代码疯了。大部分是无意义的噪音。 –