Почему я получаю без ошибок исключение Boost :: Unique - PullRequest
1 голос
/ 29 мая 2019

Я использую 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

Кто-нибудь знает, почему и как это решить?

...