main函数代码
- 在bufferevent_socket_new之前调用以下方法
evthread_use_pthreads();
evthread_make_base_notifiable(pEventBase);
- bufferevent_socket_new加入参数BEV_OPT_THREADSAFE
struct bufferevent *pBufEv = bufferevent_socket_new(pEventBase, -1, BEV_OPT_CLOSE_ON_FREE | BEV_OPT_THREADSAFE);
CMakeLists.txt配置
cmake_minimum_required(VERSION 2.8.4)
project(leo_gateway)
set(CMAKE_CXX_STANDARD 14)
set(ROOT_DIR /abc)
set(EXECUTABLE_OUTPUT_PATH ${ROOT_DIR}/bin)
include_directories(${ROOT_DIR}/lib/libevent/include)
link_directories(${ROOT_DIR}/lib/libevent/lib)
link_libraries(event)
add_executable(test main.cpp)
target_link_libraries(test event event_pthreads pthread )
注:必须加入event_pthreads
示例
- 使用pthread测试多线程锁的问题
void *t1_cb(void *args) {
struct bufferevent *pBufEv = (struct bufferevent *) args;
bufferevent_lock(pBufEv);
cout << "pthread_create1 ===============" << endl;
sleep(4);
bufferevent_unlock(pBufEv);
}
pthread_t t1;
int ret1 = pthread_create(&t1, NULL, t1_cb, pBufEv);