Я использую boost для решения многопоточной задачи.Это вызывает некоторые проблемы, когда я использую boost :: unique_lock как WriteLock .
Я упрощаю код следующим образом:
void test() {
try {
boost::unique_lock<boost::shared_mutex> _(mutex_);
Sleep(20);
printf("asdfasdf\n");
} catch (boost::system::system_error &ex) {
printf("boost::exception:%s\n", ex.what());
printf("boost::exception:%d\n", ex.code().value());
}catch (std::exception &ex) {
printf("exception:%s\n", ex.what());
}
}
int main() {
std::vector<std::thread *> thread_pool;
int max_thread=1000;
for (int i = 0; i < max_thread; i++) {
std::thread *t = new std::thread(test);
thread_pool.push_back(t);
}
for (int i = 0; i < thread_pool.size(); i++) {
thread_pool[i]->join();
}
getchar();
}
когда max_thread меньше 200 (почти), программа работает плавно.
Однако, он получает много исключений, когда max_thread больше 200 (например, 1000), результат примерно такой:
.....
boost::exception:boost::lock_error: No error
boost::exception:0
boost::exception:boost::lock_error: No error
boost::exception:0
boost::exception:0
boost::exception:0
boost::exception:boost::lock_error: No error
boost::exception:0
boost::exception:boost::lock_error: No error
boost::exception:0
asdfasdf
asdfasdf
asdfasdf
asdfasdf
asdfasdf
asdfasdf
asdfasdf
asdfasdf
asdfasdf
asdfasdf
......
Моя система win10 с c ++ 11 и boost_1.67
Кто-нибудь знает, почему и как это решить?