【发布时间】:2018-05-23 21:22:37
【问题描述】:
在过去的几个月里,我读了几本关于并行编程的书,我决定通过学习 posix 线程来结束它。
我正在阅读“PThreads programming - A Posix standard for better multiprocessing nutshell-handbook”。在第 5 章(Pthreads 和 Unix)中,作者谈到了在多线程程序中处理信号。在“线程安全库函数和系统调用”部分,作者发表了我在读过的关于并行编程的大多数书籍中没有看到的声明。声明是:
竞争条件也可能出现在使用信号处理程序或递归调用例程的传统单线程程序中。此类单线程程序可能在其进程堆栈上的各种调用帧中具有相同的例程。
我觉得破译这句话有点乏味。当递归函数使用静态存储类型保持内部结构时,是否会出现递归函数中的竞态条件?
我也很想知道信号处理程序如何导致单线程程序中的RACE CONDITION
注意:我不是计算机科学专业的学生,我非常感谢简化的术语
【问题讨论】:
-
注意:CS 学生可能无法回答这个问题。
-
我认为不能将其称为经典意义上的竞争条件。竞争条件具有某种随机行为,具体取决于调度程序策略和时间安排。作者可能在谈论从多个递归调用访问同一对象/资源时可能出现的错误。但这种行为是完全确定的。信号是另一回事,因为它们是异步发生的,显然可以中断某些数据处理并触发对该数据的其他处理。
-
@EugeneSh。您的评论中缺少什么,导致您不认为这是一个答案?你甚至正确地对比了这两个非常不同的方面(据我所知是正确的)。
-
@Yunnosch 缺乏100%的信心:)
-
好的,我确信。将转换为答案。
标签: c multithreading pthreads