c++ - 临界区段错误 - 避免死锁

标签 c++ c multithreading 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
}

我说我不知道​​答案。面试官遇到这种情况等我anss。

这种情况真的有什么设计可以避免死锁吗?

以上代码块仅供理解。我读了this .但还不清楚 提前致谢。

最佳答案

您可以使用信号处理程序捕获信号并根据需要处理资源。

我可以相信,根据他的暗示,面试官的意思是使用 RAII 惯用语——资源分配即初始化。

但我不确定这是否适用于信号...

关于c++ - 临界区段错误 - 避免死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29990918/

相关文章:

c++ - 将指针分配给迭代器

c++ - 在C++语言中,如何创建一个指向数组的指针的新对象?

c - 我正在尝试打印,但无法找出正确的命令

你能在指向数组的指针中打印内容吗?

c - 转义序列在 scanf() 函数中的实际行为

java - Java 中的线程安全枚举集

multithreading - 我们是否需要一个以上的老板组线程?

c++ - 类和构造函数 C++ - 错误和警告 C2146、C4430

c++ - 只读取可变长度数组的长度,而不读取 hdf5 中的元素

linux - 为什么我的代码在为性能分析 (-pg) 编译时,多线程运行速度比单线程运行速度慢?