在花了一些时间在C ++ 11中编写多线程代码后,我想知道我是做错了什么,或者标准中是否存在关于异常安全的一些真正缺点。
我的主要抱怨与大多数(所有?)线程原语在锁定,等待,加入等基本操作期间可能抛出的事实有关,通常有std::system_error
异常。例如,见:
http://en.cppreference.com/w/cpp/thread/mutex/lock http://en.cppreference.com/w/cpp/thread/condition_variable/wait http://en.cppreference.com/w/cpp/thread/future/wait
这使得以异常安全的方式实现诸如线程池或障碍之类的构造变得非常困难,并且它导致代码看起来很复杂。
是否有一些我不知道的特殊模式可以更容易在C ++ 11中编写异常安全的多线程代码?
据我所知,在正常情况下,线程原语中的错误是不太可能的,但是在花了这么多时间确保其他一切都是异常安全之后,似乎有点失败(啊啊)窗口:)