我的问题gdb输出:
Program received signal SIGINT, Interrupt. 0x00007ffff7bcb86b in
__lll_lock_wait_private () from /lib/x86_64-linux-gnu/libpthread.so.0 (gdb) bt
#0 0x00007ffff7bcb86b in __lll_lock_wait_private () from /lib/x86_64-linux-gnu/libpthread.so.0
#1 0x00007ffff7bc8bf7 in _L_lock_21 ()
如果有人对C++、多线程代码有经验,能对互斥问题有所了解,我将不胜感激。它运行在Red hat Linux 5.4上。我们正在调试不是我写的遗留代码。假设每秒进行非常高的调用,响应时间为3-5毫秒。我们在主应用程序中运行了大约400个线程。
我不喜欢这个应用程序的一个地方是到处使用智能指针(当SPtr超出范围时就会调用互斥锁)。写这篇文章的人似乎对SPtrs上瘾了。许多函数都将SPtr作为参数。
应用程序可以正常运行几个小时,然后我们在锁的时候突然得到互斥EINVAL (返回代码22)。我见过核心转储,它显示了不同的堆栈跟踪,没有一个地方导致它。
你会推荐什么工具来调试它?这是否会由于内存或堆
pthread属性对象是否需要在使用它们的对象的生命周期中一直存在,或者在使用它们之后立即销毁它们是安全的吗?例如:
// Create the mutex attributes.
pthread_mutexattr_t attributes;
pthread_mutexattr_init( &attributes );
pthread_mutexattr_settype( &attributes, PTHREAD_MUTEX_NORMAL );
// Create the mutex using the attributes from above.
pthread_mute
我有个代码看起来是:
boost::mutex::scoped_lock lck(mQueueMutex);
while (true)
{
...
// unlock the queue while we exec the job
lck.unlock();
...
// lock the queue again
lck.lock();
}
我想做这样的事情:
boost::mutex::scoped_lock lock(mQueueMutex);
while (true)
{
...
// unlock the qu
我试图锁定来自另一个线程的互斥锁,以清除一个向量,使用一个scoped_lock,期望代码将等待,直到另一个线程释放它。 但是发生的情况是,试图获取锁的函数抛出一个异常,声明资源正忙。 //Called from thread 1
Foo::DoStuff()
{
std::scoped_lock<std::mutex>(m_lock);
for (auto thing: stuff) //should be non trivial in size
{
thing->bar();
}
}
//called from thre
我想知道是否有可能在Linux下使用POSIX线程库实现以下逻辑。
given a mutex
if (I can get the mutex) {
lock the mutex
call fun A
unlcok the mutex
}
else {
call fun B
}
我是Linux下的线程编程新手,所以只需使用伪代码来显示我正在寻找的代码片段的逻辑即可。
class C {
mutable std::mutex _lock;
map<string,string> deep_member;
public:
auto get_big_lump()
{
std::unique_lock<std::mutex> lock(_lock); // establish scope guard
return deep_member; // copy the stuff while it can't be changed on another thread.
}
}