2

我发现tcp::socket从 std::thread 访问会导致程序终止。这是来自 boost 的示例程序。 http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/example/echo/blocking_tcp_echo_server.cpp 编译它:g++ blocking_tcp_echo_server.cpp -std=c++11 -lboost_system -lboost_thread -pthread

到目前为止,一切正常。但是如果你用 std::thread (和 #include )替换 boost::thread ,程序在访问 sock 成员( )时会崩溃(终止socket::read_some())。

错误消息:在没有活动异常的情况下调用终止。

任何想法?

4

1 回答 1

1

boost::thread这就是和之间的区别std::thread。我已经看过代码,您可以修复它以使用std::thread,就像这样:

void server(boost::asio::io_service& io_service, short port) {
    // ...
    std::thread t(boost::bind(session, sock));
    t.detach();
}

使用时似乎必须分离或加入线程std::thread

代码:

#include <iostream>
#include <thread>

int main(void) {
    std::thread t([](){std::cout << "will throw exception" << std::endl;});
//  t.detach();
    return 0;
}

如果不分离不加入不链接pthread,它将抛出异常

于 2013-08-02T04:41:27.373 回答