Joh*_* Li 5 pthreads c++11 stdmutex
该pthread_mutex_init()函数在无法初始化互斥锁时返回一个非零值,而std::mutexC++11 中的类的构造函数为noexcept.
假设一个人选择在 pthreads 互斥体之上实现一个 C++ 互斥体类。他在类中包装了一个 pthread 互斥锁,并尝试通过在构造函数中调用 pthread_mutex_init() 来初始化它。如果函数调用返回非零值,表示错误,则无法立即报告错误,因为构造函数无法抛出。一种替代方法是抛出异常,直到在互斥锁上实际调用锁定方法。但这种方法似乎是错误的。
有没有另一种方法可以做到这一点,使用一些聪明的技巧来保证初始化互斥锁总是成功的?
更新:我将在这个问题上回答我自己的问题。根据语言标准,在 30.4.1.3 pge 1163 中,它说“如果互斥类型的对象初始化失败,将抛出 system_error 类型的异常。”
而 noexcept 的函数可以在函数体内抛出,只是调用者无法捕获异常。如果在 noexcept 函数内抛出异常,则将调用 std::terminate。
| 归档时间: |
|
| 查看次数: |
1577 次 |
| 最近记录: |