冻结(挂起)会发生在不使用互斥锁、信号量等的线程不安全代码中吗?
Posted
技术标签:
【中文标题】冻结(挂起)会发生在不使用互斥锁、信号量等的线程不安全代码中吗?【英文标题】:Can Freeze(Hanging) happen in Thread-UnSafe Code that doesn't use Mutex, Semaphore, etc? 【发布时间】:2021-11-10 04:04:33 【问题描述】:我的环境是嵌入式Linux环境, 我知道如果使用 Thread-UnSafety,就会发生崩溃。 也会出现冻结?
【问题讨论】:
冻结程序主要发生在死锁情况下。 如果您有 未定义的行为, 那么就没有办法说明什么是可能的。例如,注册变量可能会促进无限循环? 如果您的程序调用未定义的行为(如果您以非线程安全的方式使用多个线程,很可能会发生这种情况),那么任何事情都可能发生,包括冻结。 @PKramer 那篇文章是关于线程之间同步时出现的问题。 OP 正在询问没有时会发生什么 @463035818_is_not_a_number 我当时理解错误。评论已删除 【参考方案1】:在不调用传统同步对象(例如网络代码)的情况下,很容易发生线程冻结。您发出 recv() 但远程端不发送任何内容。你的线程只会坐在那里等待。
【讨论】:
不幸的是,我的代码只有一个使用 std::find 的 if 语句。以上是关于冻结(挂起)会发生在不使用互斥锁、信号量等的线程不安全代码中吗?的主要内容,如果未能解决你的问题,请参考以下文章