c - 互斥锁 vs 忙等待 tcp io

标签 c linux multithreading tcp mutex

我不在乎成为一个 cpu pig ,因为我为每个核心分配了一个线程,系统线程被阻塞到他们自己的集合。我的理解是当其他任务要运行时互斥锁是有用的,在这种情况下这并不重要所以我正在考虑在内存中的地址上使用消费者线程循环等待其值不为零 - 就像在单个生产者中一样使用 TCP_NONBLOCK 设置循环 recv() 的线程刚刚存储了信息,现在它是非零的。

考虑到我的情况,我的植入是否明智,或者我是否应该使用互斥锁或自定义中断,即使没有其他任务将运行。

最佳答案

除了@ugoren 的观点和其他人的评论:

即使您有忙等待和燃烧核心的有效用例(公认的罕见),您也需要:

  • 保护线程间共享的数据。这是锁发挥作用的地方 - 你需要 mutual exclusion在访问任何复杂的共享数据结构时。人们倾向于调查lock-free这里的算法,但这些方式并不明显且容易出错,仍然被认为是深黑魔法。在您对并发性没有充分的了解之前,甚至不要尝试这些。
  • 通知线程有关更改的状态。这是您要使用 conditional variables 的地方或显示器。还有其他方法,eventfd(2)例如,在 Linux 上。

这里有一些链接可以让你证明这比你想象的要难得多:

关于c - 互斥锁 vs 忙等待 tcp io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10988710/

相关文章:

c - 程序验证问题。请帮忙!

python - 通过 Python 安装 Linux 软件包?

linux - Linux环境住在哪里?

python - numpy/scipy 中的哪些操作是多线程的?

.net - 同步等待而不阻塞UI线程

c - 是否可以 typedef 预处理器指令?

c - 具有位字段的结构中的哪些位是哪些?

linux - 如何在 Bash 子 shell 中执行 shell 脚本?

c# - 多线程或 GPU 计算

c++ - 如何在使用 GCC 时使用 __align__ 中的大小进行缓存对齐?