【问题标题】:What does the term "interrupt safe" mean?术语“中断安全”是什么意思?
【发布时间】:2011-09-26 00:22:14
【问题描述】:

我时不时会遇到这个词。 现在我真的需要一个清晰的解释,因为我希望使用一些 MPI 例程 据说不是中断安全的。

【问题讨论】:

  • MPI 手册中的典型引用是(重复地)“这个例程是线程安全的。这意味着这个例程可以被多个线程安全地使用,而不需要任何用户提供的线程锁。但是,该例程不是中断安全的。通常,这是由于使用了内存分配例程,例如 malloc 或其他本身不是中断安全的非 MPICH 运行时例程。”(例如:mpich.org/static /docs/v3.3/www3/MPI_Type_dup.html)。我也在试图找出它的含义。

标签: parallel-processing mpi interrupt


【解决方案1】:

我相信这是reentrant 的另一种说法。如果一个函数是reentrant,它可以在中间被中断并再次调用。

例如:

void function()
{
    lock(mtx);
    /* code ... */
    unlock(mtx);
}

这个函数显然可以被不同的线程调用(互斥锁会保护里面的代码)。但是如果一个信号在lock(mtx) 之后到达并且再次调用该函数,它将死锁。所以它不是中断安全的。

【讨论】:

  • @RestlessC0bra 您的示例隐含地假设递归锁,considered by some 不好。
  • @RestlessC0bra 假设一个线程获取了互斥锁。然后同一个线程处理一个信号并以某种方式重新开始执行该函数(这很常见)。如果锁不是递归的(也不应该是递归的),那么唯一的线程就会死锁。
【解决方案2】:

对来自中断的并发访问安全的代码被称为是中断安全的。

假设您的进程处于临界区并且异步事件发生并中断您的进程以访问与进程在抢占之前访问的相同共享资源。

如果在操作资源的代码中间发生中断并且中断处理程序可以访问相同的资源,则这是一个主要错误。锁定可以拯救你!

【讨论】:

  • OP 引用的完整引用是“线程和中断安全这个例程是线程安全的。这意味着这个例程可以被多个线程安全使用,而不需要任何用户提供的线程锁。但是,该例程不是中断安全的。通常,这是由于使用了内存分配例程,例如 malloc 或其他本身不是中断安全的非 MPICH 运行时例程。”(例如这里:mpich.org/static/docs/v3.3/www3/MPI_Type_dup.html )。它明确表示不需要(线程)锁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多