互斥错误会引发异常吗?

时间:2018-04-25 14:04:04

标签: c++ multithreading

互斥操作可能会导致以下互斥错误代码出现异常:

  1. resource_deadlock_would_occur
  2. resource_unavailable_try_again
  3. operation_not_permitted
  4. device_or_resource_busy
  5. invalid_argument
  6. 我尝试了两种情况:

    1. a deadlock:这会导致resource_deadlock_would_occur错误代码出现异常。
    2. trying to lock a mutex twice:这会导致device_or_resource_busy错误代码出现异常。
    3. 这两个节目都来自Stroustrup的书。

      这两种情况都不会导致异常。两个程序都只是在没有异常或错误消息的情况下结束,可能是由于超时

      Josuttis声明,如果出现死锁,标准库允许(但不要求)抛出异常。

      此外,根据this thread,尝试两次锁定互斥锁也可能不会导致抛出异常。显然,标准库将其视为“未定义的行为”,并将其留给实现来决定。

      那么,其他三个错误代码(resource_unavailable_try_againoperation_not_permittedinvalid_argument)是否也被视为“未定义的行为”?

      如果在这些情况下无法保证异常,那么程序如何在运行时保护自己,以防止此错误?

      我无法在这方面找到任何在线文档,因此也无法找到此查询。

0 个答案:

没有答案