gpt4 book ai didi

multithreading - 访问boost::asio::ip::tcp::socket时,C++ 11线程崩溃

转载 作者:行者123 更新时间:2023-12-03 13:05:02 25 4
gpt4 key购买 nike

我发现从std::thread访问tcp::socket将导致程序终止。
这是来自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
到目前为止,一切正常。
但是,如果将boost::thread替换为std::thread(和#include),则该程序在访问 socks 成员(socket::read_some())时将崩溃(终止)。
错误消息:无 Activity 异常的终止调用。

任何的想法?

最佳答案

那是boost::threadstd::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 ,它将引发异常

关于multithreading - 访问boost::asio::ip::tcp::socket时,C++ 11线程崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18008621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com