关键部分的段错误 - 避免死锁
segfault in critical section - avoiding deadlock
我在面试中被问到以下问题:
1) 有两个线程:T1 和 T2。它们共享一个资源,并使用pthread_mutex进行同步以避免死锁。您将如何设计代码,以便在 T1 进入关键部分后发生任何分段错误,T2 不会陷入死锁?
//T1 Code
try
{
pthread_mutex_lock(somelock);
....
/// work on shared memory
//What will happen if segfault happens here?
....
pthread_mutex_unlock(somelock);
} catch(...)
{
pthread_mutex_unlock(somelock);
// exception happens
}
我说我不认识。 面试官到达这种情况等待我的ans。
在这种情况下,真的有什么设计可以避免死锁吗?
上面的代码块只是为了理解。我读了这个。但不清楚提前谢谢。
您可以使用信号处理程序捕获信号并根据需要处理资源。
我可以相信,在他的暗示下,面试官的意思是使用 RAII 习语 - 资源分配是初始化。
但我不确定这是否适用于信号...
相关文章:
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何在没有死锁和/或争用的情况下正确使用 std::mutex C++?
- 用C++中的std::condition_variable将线程置于死锁中会有风险吗
- 使用 std::async 时死锁,将来作为成员
- 如何调试读写器锁的死锁?
- 为什么在Visual Studio 2013上的std::this_thread::sleep_for上死锁
- localtime() 函数正在调用 ___lll_lock_wait_private(),这会使线程陷入死锁
- 如何重现 Boost 进程文档提示的死锁?
- 多线程Windows GUI应用程序中的死锁
- 为什么printf会导致与future.get的死锁,而cout则不会?
- 分离的线程:在繁忙时销毁互斥锁 错误C++
- C++中具有阻塞队列和障碍的死锁
- 死锁使用 std::mutex 来保护多个线程中的 cout
- 避免并发等待对象中的死锁
- 在VC++中从DLLMAIN内部调用D3D的CREATEDEVICE时,它会创建一个死锁(loaderlock?)。有没有办法克服这个问题?最终目标内
- 当用2个螺纹锁定时,将recursive_mutex死锁
- 程序在 C++11 中使用条件变量进入死锁
- 一个线程提升的死锁
- 单个生产者/多个消费者死锁
- 关键部分的段错误 - 避免死锁