冻结(挂起)会发生在不使用互斥锁、信号量等的线程不安全代码中吗?

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 语句。

以上是关于冻结(挂起)会发生在不使用互斥锁、信号量等的线程不安全代码中吗?的主要内容,如果未能解决你的问题,请参考以下文章

互斥锁,信号量,条件变量,读写锁

多线程之线程同步(互斥锁信号量条件变量和读写锁​)

多线程之线程同步(互斥锁信号量条件变量和读写锁​)

多线程之线程同步(互斥锁信号量条件变量和读写锁​)

锁volatileCAS的比较

Python的互斥锁与信号量