boost
-
asio::io_service + promise + future background worker프로그래밍/코드 조각 2016. 2. 15. 07:45
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#include #include #include #include using namespace boost::asio; io_service ios;io_service::work work{ ios }; template auto post(Func&& func){ using return_type = decltype(func()); auto promise = std::make_shared(); auto future = promise->get_future(); ios.post ( [promise, func] { promise->set_value(func()..
-
boost::pool_allocator는 생각만큼 빠르지 않다?프로그래밍/c++ 2016. 1. 23. 08:09
간단한 코드를 보자!하나는 boost::pool_allocator로 부터 shared_ptr 할당을, 하나는 기본 new 연산자로 shared_ptr 할당을 한 것이다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980#include #include #include #include #include using namespace std; struct obj{ int a; int b; int c;}; using pool_allocator_type = boost::pool_allocator;s..
-
boost::property_tree를 이용해 xml 데이터 파싱하기프로그래밍/c++ 2016. 1. 22. 06:47
서버의 설정 값들을 텍스트 파일로 두고 읽어오는 방식을 사용했으나 좀 더 체계화된 방식이 있으면 좋겠다고 생각했다. 이유는 매번 텍스트 파일의 양식을 정의해야 했으므로, 해당 양식에서 데이터를 뽑아낼 수 있는 파서를 직접 만들어 써야 했으며, 값 만을 저장하는 경우 사람이 보기에 직관적이지가 않아 수정이 어려웠다. 근데 우성이형이 그런 것들을 xml로 하면 좋다고 해서 c++에서의 이용 방법들을 알아봤고, 역시나 boost에도 xml parser가 있었다. 123456789101112131415161718192021222324252627282930 #include //... namespace property_tree = boost::property_tree; property_tree::ptree read..
-
boost::lockfree::spsc_queue 사용 시 주의할 점프로그래밍/c++ 2016. 1. 18. 05:43
trivial 타입만 사용할 수 있음 struct buffer_info // trivial type { void* buffer; size_t length; }; struct buffer_info_2 // non trivial type { buffer_info(void* buffer, size_t length) : buffer{buffer}, length{length} { } }; 초기화 시 지정된 크기로만 사용 가능. 초기화 시 버퍼 크기를 10개로 지정했는데, 10개를 초과해서 집어 넣을 순 없다. boost::lockfree::spsc_queue queue{ 10 }; for(size_t i = 0; i != 11 /* error! */; ++i) { queue.push(i); }
-
boost pool_allocator 분석프로그래밍/c++ 2016. 1. 14. 23:30
부스트 풀 메모리 할당자 헤더 #include 특징 스레드에 안전함 rebind 지원가변 크기 지원 pool_allocator vector와 같은 연속적인 메모리를 가지는 자료형 할당에 적합한 할당자. 내부적으로 singleton_pool을 사용하고, singleton_pool은 pool을 전역적으로 사용할 수 있도록 만든 클래스 pool_allocator::allocate 호출 시 다음과 같은 호출 과정을 거침 pool::ordered_malloc 내부 123456789101112131415template void * pool::ordered_malloc(const size_type n){ //! Gets address of a chunk n, allocating new memory if not alr..
-
boost::lockfree::queue의 타입 제한(error C2338)프로그래밍/c++ 2016. 1. 13. 02:57
boost lockfree queue는 trivial 타입만 사용할 수 있다. 123boost::lockfree::queue int_queue; // ok boost::lockfree::queue string_queue; // error! trivial 타입 조건?0. 어떤 생성자도 없음1. 가상 함수 없음2. 소멸자 없음memcpy로 인스턴스 복사를 해도 아무런 문제가 없을 그런 타입을 trivial이라 부른다. 123456789101112131415161718// Trivial Typestruct A{ void* buf; size_t size;}; // Non Trivial Typestruct B{ B(): buf{nullptr}, size{0} { } void* buf; size_t size;}; ..
-
shared_mutex, 그리고 upgrade_lock.프로그래밍/c++ 2015. 12. 28. 09:25
shared_mutex? 읽기/쓰기 락을 지원하는 뮤텍스.데이터를 수정하지 않고 읽기만 한다면, n개의 스레드에서 접근하더라도 아무런 문제가 없다.하지만 쓰기, 수정이 일어나야 한다면? 읽기도 막아야한다.따라서, 읽기만 하는 상황에선 읽기 락을 걸어 n개의 스레드에서 접근이 가능하도록 하고,쓰기를 해야 할 상황에선 1개의 스레드에서만 접근 가능하도록 하는 락을 지원하는 뮤텍스이다. 이 락 readers writer lock이라고도 불림. 지금(2015/12/xx) 기준으론 boost 라이브러리에만 존재하지만, c++17에는 공식적으로 편입될 예정(http://en.cppreference.com/w/cpp/thread/shared_mutex) 헤더는 #include 그리고 boost::shared_mute..
-
boost python + lambda프로그래밍/c++ 2015. 11. 20. 11:01
Boost python + lambda 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970// 실패 script_dict["lobby_class"] = py::class_("lobby_class", py::no_init) .def("name", &lobby::name) .def("async_accept", [&lobby_](const std::string addr, unsigned short port){ … }) ; // 실패auto async_accept = [&lobby_](const std::string& addr, ..