Я использую lambda's capture
для передачи параметров в boost::asio::io_context::post
обратный вызов.
Это потокобезопасно?
Код
#include <iostream>
#include "boost/asio.hpp"
#include <thread>
int main() {
boost::asio::io_service io_service;
boost::asio::io_service::work work(io_service);
std::thread t([&](){
io_service.run();
});
auto var = 1;
io_service.post([&io_service, var]() {
std::cout << "v: " << var << std::endl;
io_service.stop();
});
t.join();
return 0;
}
Как видите,Я передаю var
в lambda's capture
.main thread
устанавливает значение var
, а поток t
читает его.
Я не использовал ни один из memory ordering
, например, std::memory_order_release
после установки var
в 1
,и std::memory_order_acquire
до чтения значения var
.Более того, я не думаю, что могу - потому что переменная var
передается по значению в lambda
.
Безопасно ли это делать?
Если нет, как это должно бытьсделано?