这篇教程C++ tb_spinlock_enter函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中tb_spinlock_enter函数的典型用法代码示例。如果您正苦于以下问题:C++ tb_spinlock_enter函数的具体用法?C++ tb_spinlock_enter怎么用?C++ tb_spinlock_enter使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了tb_spinlock_enter函数的27个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: tb_aiop_rtor_poll_exitstatic tb_void_t tb_aiop_rtor_poll_exit(tb_aiop_rtor_impl_t* rtor){ tb_aiop_rtor_poll_impl_t* impl = (tb_aiop_rtor_poll_impl_t*)rtor; if (impl) { // exit pfds tb_spinlock_enter(&impl->lock.pfds); if (impl->pfds) tb_vector_exit(impl->pfds); impl->pfds = tb_null; tb_spinlock_leave(&impl->lock.pfds); // exit cfds if (impl->cfds) tb_vector_exit(impl->cfds); impl->cfds = tb_null; // exit hash tb_spinlock_enter(&impl->lock.hash); if (impl->hash) tb_hash_exit(impl->hash); impl->hash = tb_null; tb_spinlock_leave(&impl->lock.hash); // exit lock tb_spinlock_exit(&impl->lock.pfds); tb_spinlock_exit(&impl->lock.hash); // free it tb_free(impl); }}
开发者ID:DonkeyWs,项目名称:tbox,代码行数:29,
示例2: tb_aiop_rtor_poll_delostatic tb_bool_t tb_aiop_rtor_poll_delo(tb_aiop_rtor_impl_t* rtor, tb_aioo_impl_t const* aioo){ // check tb_aiop_rtor_poll_impl_t* impl = (tb_aiop_rtor_poll_impl_t*)rtor; tb_assert_and_check_return_val(impl && impl->pfds && impl->cfds && aioo && aioo->sock, tb_false); // the aiop tb_aiop_impl_t* aiop = rtor->aiop; tb_assert_and_check_return_val(aiop, tb_false); // delo it, TODO: delo by binary search tb_spinlock_enter(&impl->lock.pfds); tb_remove_first_if(impl->pfds, tb_poll_walk_delo, (tb_pointer_t)(((tb_long_t)aioo->sock) - 1)); tb_spinlock_leave(&impl->lock.pfds); // del sock => aioo tb_spinlock_enter(&impl->lock.hash); if (impl->hash) tb_hash_del(impl->hash, aioo->sock); tb_spinlock_leave(&impl->lock.hash); // spak it if (aiop->spak[0]) tb_socket_send(aiop->spak[0], (tb_byte_t const*)"p", 1); // ok return tb_true;}
开发者ID:DonkeyWs,项目名称:tbox,代码行数:26,
示例3: tb_aiop_rtor_select_clerstatic tb_void_t tb_aiop_rtor_select_cler(tb_aiop_rtor_impl_t* rtor){ tb_aiop_rtor_select_impl_t* impl = (tb_aiop_rtor_select_impl_t*)rtor; if (impl) { // free fds tb_spinlock_enter(&impl->lock.pfds); impl->sfdm = 0; FD_ZERO(&impl->rfdi); FD_ZERO(&impl->wfdi); FD_ZERO(&impl->efdi); FD_ZERO(&impl->rfdo); FD_ZERO(&impl->wfdo); FD_ZERO(&impl->efdo); tb_spinlock_leave(&impl->lock.pfds); // clear hash tb_spinlock_enter(&impl->lock.hash); if (impl->hash) tb_hash_clear(impl->hash); tb_spinlock_leave(&impl->lock.hash); // spak it if (rtor->aiop && rtor->aiop->spak[0]) tb_socket_send(rtor->aiop->spak[0], (tb_byte_t const*)"p", 1); }}
开发者ID:DonkeyWs,项目名称:tbox,代码行数:25,
示例4: tb_aiop_rtor_select_addo/* ////////////////////////////////////////////////////////////////////////////////////// * implementation */static tb_bool_t tb_aiop_rtor_select_addo(tb_aiop_rtor_impl_t* rtor, tb_aioo_impl_t const* aioo){ // check tb_aiop_rtor_select_impl_t* impl = (tb_aiop_rtor_select_impl_t*)rtor; tb_assert_and_check_return_val(impl && rtor->aiop && aioo && aioo->sock, tb_false); // the aiop tb_aiop_impl_t* aiop = rtor->aiop; tb_assert_and_check_return_val(aiop, tb_false); // check size tb_spinlock_enter(&impl->lock.hash); tb_size_t size = tb_hash_size(impl->hash); tb_spinlock_leave(&impl->lock.hash); tb_assert_and_check_return_val(size < FD_SETSIZE, tb_false); // add sock => aioo tb_bool_t ok = tb_false; tb_spinlock_enter(&impl->lock.hash); if (impl->hash) { tb_hash_set(impl->hash, aioo->sock, aioo); ok = tb_true; } tb_spinlock_leave(&impl->lock.hash); tb_assert_and_check_return_val(ok, tb_false); // the fd tb_long_t fd = ((tb_long_t)aioo->sock) - 1; // the code tb_size_t code = aioo->code; // enter tb_spinlock_enter(&impl->lock.pfds); // update fd max if (fd > (tb_long_t)impl->sfdm) impl->sfdm = (tb_size_t)fd; // init fds if (code & (TB_AIOE_CODE_RECV | TB_AIOE_CODE_ACPT)) FD_SET(fd, &impl->rfdi); if (code & (TB_AIOE_CODE_SEND | TB_AIOE_CODE_CONN)) FD_SET(fd, &impl->wfdi); FD_SET(fd, &impl->efdi); // leave tb_spinlock_leave(&impl->lock.pfds); // spak it if (aiop->spak[0] && code) tb_socket_send(aiop->spak[0], (tb_byte_t const*)"p", 1); // ok? return ok;}
开发者ID:DonkeyWs,项目名称:tbox,代码行数:56,
示例5: tb_aicp_exittb_bool_t tb_aicp_exit(tb_aicp_ref_t aicp){ // check tb_aicp_impl_t* impl = (tb_aicp_impl_t*)aicp; tb_assert_and_check_return_val(impl, tb_false); // kill all first tb_aicp_kill_all((tb_aicp_ref_t)impl); // wait all exiting if (tb_aicp_wait_all((tb_aicp_ref_t)impl, 5000) <= 0) { // wait failed, trace left aicos tb_spinlock_enter(&impl->lock); if (impl->pool) tb_fixed_pool_walk(impl->pool, tb_aicp_walk_wait, tb_null); tb_spinlock_leave(&impl->lock); return tb_false; } // kill loop tb_aicp_kill((tb_aicp_ref_t)impl); // wait workers exiting tb_hong_t time = tb_mclock(); while (tb_atomic_get(&impl->work) && (tb_mclock() < time + 5000)) tb_msleep(500); // exit proactor if (impl->ptor) { tb_assert(impl->ptor && impl->ptor->exit); impl->ptor->exit(impl->ptor); impl->ptor = tb_null; } // exit aico pool tb_spinlock_enter(&impl->lock); if (impl->pool) tb_fixed_pool_exit(impl->pool); impl->pool = tb_null; tb_spinlock_leave(&impl->lock); // exit lock tb_spinlock_exit(&impl->lock); // free impl tb_free(impl); // ok return tb_true;}
开发者ID:DonkeyWs,项目名称:tbox,代码行数:49,
示例6: tb_timer_delaytb_size_t tb_timer_delay(tb_timer_ref_t timer){ // check tb_timer_impl_t* impl = (tb_timer_impl_t*)timer; tb_assert_and_check_return_val(impl && impl->heap, -1); // stoped? tb_assert_and_check_return_val(!tb_atomic_get(&impl->stop), -1); // enter tb_spinlock_enter(&impl->lock); // done tb_size_t delay = -1; if (tb_heap_size(impl->heap)) { // the task tb_timer_task_impl_t const* task_impl = (tb_timer_task_impl_t const*)tb_heap_top(impl->heap); if (task_impl) { // the now tb_hong_t now = tb_timer_now(impl); // the delay delay = task_impl->when > now? (tb_size_t)(task_impl->when - now) : 0; } } // leave tb_spinlock_leave(&impl->lock); // ok? return delay;}
开发者ID:1060460048,项目名称:tbox,代码行数:34,
示例7: tb_timer_toptb_hize_t tb_timer_top(tb_timer_ref_t timer){ // check tb_timer_impl_t* impl = (tb_timer_impl_t*)timer; tb_assert_and_check_return_val(impl && impl->heap, -1); // stoped? tb_assert_and_check_return_val(!tb_atomic_get(&impl->stop), -1); // enter tb_spinlock_enter(&impl->lock); // done tb_hize_t when = -1; if (tb_heap_size(impl->heap)) { // the task tb_timer_task_impl_t const* task_impl = (tb_timer_task_impl_t const*)tb_heap_top(impl->heap); if (task_impl) when = task_impl->when; } // leave tb_spinlock_leave(&impl->lock); // ok? return when;}
开发者ID:1060460048,项目名称:tbox,代码行数:27,
示例8: tb_thread_pool_task_post_listtb_size_t tb_thread_pool_task_post_list(tb_thread_pool_ref_t pool, tb_thread_pool_task_t const* list, tb_size_t size){ // check tb_thread_pool_impl_t* impl = (tb_thread_pool_impl_t*)pool; tb_assert_and_check_return_val(impl && list, 0); // init the post size tb_size_t post_size = 0; // enter tb_spinlock_enter(&impl->lock); // done tb_size_t ok = 0; if (!impl->bstoped) { for (ok = 0; ok < size; ok++) { // post task tb_thread_pool_job_t* job = tb_thread_pool_jobs_post_task(impl, &list[ok], &post_size); tb_assert_and_check_break(job); } } // leave tb_spinlock_leave(&impl->lock); // post the workers if (ok && post_size) tb_thread_pool_worker_post(impl, post_size); // ok? return ok;}
开发者ID:luxuan,项目名称:tbox,代码行数:33,
示例9: tb_pool_dumptb_void_t tb_pool_dump(tb_pool_ref_t pool){ // check tb_pool_impl_t* impl = (tb_pool_impl_t*)pool; tb_assert_and_check_return(impl); // uses allocator? if (impl->allocator) { // dump it tb_allocator_dump(impl->allocator); return ; } // check tb_assert_and_check_return(impl->large_pool && impl->small_pool); // enter tb_spinlock_enter(&impl->lock); // dump pool tb_small_pool_dump(impl->small_pool); // leave tb_spinlock_leave(&impl->lock);}
开发者ID:KeplerGods,项目名称:tbox,代码行数:26,
示例10: tb_pool_exittb_void_t tb_pool_exit(tb_pool_ref_t pool){ // check tb_pool_impl_t* impl = (tb_pool_impl_t*)pool; tb_assert_and_check_return(impl); // uses allocator? if (impl->allocator) { // exit it tb_allocator_free(impl->allocator, impl); return ; } // enter tb_spinlock_enter(&impl->lock); // exit small pool if (impl->small_pool) tb_small_pool_exit(impl->small_pool); impl->small_pool = tb_null; // leave tb_spinlock_leave(&impl->lock); // exit lock tb_spinlock_exit(&impl->lock); // exit pool if (impl->large_pool) tb_large_pool_free(impl->large_pool, impl);}
开发者ID:KeplerGods,项目名称:tbox,代码行数:30,
示例11: tb_aico_init/* ////////////////////////////////////////////////////////////////////////////////////// * implementation */tb_aico_ref_t tb_aico_init(tb_aicp_ref_t aicp){ // check tb_aicp_impl_t* aicp_impl = (tb_aicp_impl_t*)aicp; tb_assert_and_check_return_val(aicp_impl && aicp_impl->pool, tb_null); // enter tb_spinlock_enter(&aicp_impl->lock); // make aico tb_aico_impl_t* aico = (tb_aico_impl_t*)tb_fixed_pool_malloc0(aicp_impl->pool); // init aico if (aico) { aico->aicp = aicp; aico->type = TB_AICO_TYPE_NONE; aico->handle = tb_null; aico->state = TB_STATE_CLOSED; // init timeout tb_size_t i = 0; tb_size_t n = tb_arrayn(aico->timeout); for (i = 0; i < n; i++) aico->timeout[i] = -1; } // leave tb_spinlock_leave(&aicp_impl->lock); // ok? return (tb_aico_ref_t)aico;}
开发者ID:1060460048,项目名称:tbox,代码行数:35,
示例12: tb_aico_exittb_void_t tb_aico_exit(tb_aico_ref_t aico){ // check tb_aico_impl_t* impl = (tb_aico_impl_t*)aico; tb_aicp_impl_t* aicp_impl = (tb_aicp_impl_t*)impl->aicp; tb_assert_and_check_return(impl && aicp_impl && aicp_impl->pool); // wait closing? tb_size_t tryn = 15; while (tb_atomic_get(&impl->state) != TB_STATE_CLOSED && tryn--) { // trace tb_trace_d("exit[%p]: type: %lu, handle: %p, state: %s: wait: ..", aico, tb_aico_type(aico), impl->handle, tb_state_cstr(tb_atomic_get(&impl->state))); // wait some time tb_msleep(200); } // check tb_assert_abort(tb_atomic_get(&impl->state) == TB_STATE_CLOSED); tb_check_return(tb_atomic_get(&impl->state) == TB_STATE_CLOSED); // enter tb_spinlock_enter(&aicp_impl->lock); // trace tb_trace_d("exit[%p]: type: %lu, handle: %p, state: %s: ok", aico, tb_aico_type(aico), impl->handle, tb_state_cstr(tb_atomic_get(&impl->state))); // free it tb_fixed_pool_free(aicp_impl->pool, aico); // leave tb_spinlock_leave(&aicp_impl->lock);}
开发者ID:1060460048,项目名称:tbox,代码行数:34,
示例13: tb_aiop_rtor_poll_poststatic tb_bool_t tb_aiop_rtor_poll_post(tb_aiop_rtor_impl_t* rtor, tb_aioe_t const* aioe){ // check tb_aiop_rtor_poll_impl_t* impl = (tb_aiop_rtor_poll_impl_t*)rtor; tb_assert_and_check_return_val(impl && impl->pfds && impl->cfds && aioe, tb_false); // the aiop tb_aiop_impl_t* aiop = rtor->aiop; tb_assert_and_check_return_val(aiop, tb_false); // the aioo tb_aioo_impl_t* aioo = (tb_aioo_impl_t*)aioe->aioo; tb_assert_and_check_return_val(aioo, tb_false); // save aioo aioo->code = aioe->code; aioo->priv = aioe->priv; // sete it, TODO: sete by binary search tb_spinlock_enter(&impl->lock.pfds); tb_walk_all(impl->pfds, tb_poll_walk_sete, (tb_pointer_t)aioe); tb_spinlock_leave(&impl->lock.pfds); // spak it if (aiop->spak[0]) tb_socket_send(aiop->spak[0], (tb_byte_t const*)"p", 1); // ok return tb_true;}
开发者ID:DonkeyWs,项目名称:tbox,代码行数:29,
示例14: tb_timer_task_exittb_void_t tb_timer_task_exit(tb_timer_ref_t timer, tb_timer_task_ref_t task){ // check tb_timer_impl_t* impl = (tb_timer_impl_t*)timer; tb_timer_task_impl_t* task_impl = (tb_timer_task_impl_t*)task; tb_assert_and_check_return(impl && impl->pool && task_impl); // trace tb_trace_d("exit: when: %lld, period: %u, refn: %u", task_impl->when, task_impl->period, task_impl->refn); // enter tb_spinlock_enter(&impl->lock); // remove it? if (task_impl->refn > 1) { // refn-- task_impl->refn--; // cancel task task_impl->func = tb_null; task_impl->priv = tb_null; task_impl->repeat = 0; } // remove it from pool directly if the task_impl have been expired else tb_fixed_pool_free(impl->pool, task_impl); // leave tb_spinlock_leave(&impl->lock);}
开发者ID:1060460048,项目名称:tbox,代码行数:30,
示例15: tb_dns_cache_init/* ////////////////////////////////////////////////////////////////////////////////////// * implementation */tb_bool_t tb_dns_cache_init(){ // enter tb_spinlock_enter(&g_lock); // done tb_bool_t ok = tb_false; do { // init hash if (!g_cache.hash) g_cache.hash = tb_hash_init(tb_align8(tb_isqrti(TB_DNS_CACHE_MAXN) + 1), tb_item_func_str(tb_false), tb_item_func_mem(sizeof(tb_dns_cache_addr_t), tb_null, tb_null)); tb_assert_and_check_break(g_cache.hash); // ok ok = tb_true; } while (0); // leave tb_spinlock_leave(&g_lock); // failed? exit it if (!ok) tb_dns_cache_exit(); // ok? return ok;}
开发者ID:DonkeyWs,项目名称:tbox,代码行数:30,
示例16: tb_aiop_aioo_init/* ////////////////////////////////////////////////////////////////////////////////////// * aioo */static tb_aioo_ref_t tb_aiop_aioo_init(tb_aiop_impl_t* impl, tb_socket_ref_t sock, tb_size_t code, tb_cpointer_t priv){ // check tb_assert_and_check_return_val(impl && impl->pool, tb_null); // enter tb_spinlock_enter(&impl->lock); // make aioo tb_aioo_impl_t* aioo = (tb_aioo_impl_t*)tb_fixed_pool_malloc0(impl->pool); // init aioo if (aioo) { aioo->code = code; aioo->priv = priv; aioo->sock = sock; } // leave tb_spinlock_leave(&impl->lock); // ok? return (tb_aioo_ref_t)aioo;}
开发者ID:cdrr,项目名称:tbox,代码行数:28,
示例17: tb_allocator_malloc_tb_pointer_t tb_allocator_malloc_(tb_allocator_ref_t allocator, tb_size_t size __tb_debug_decl__){ // check tb_assert_and_check_return_val(allocator, tb_null); // enter tb_spinlock_enter(&allocator->lock); // malloc it tb_pointer_t data = tb_null; if (allocator->malloc) data = allocator->malloc(allocator, size __tb_debug_args__); else if (allocator->large_malloc) data = allocator->large_malloc(allocator, size, tb_null __tb_debug_args__); // trace tb_trace_d("malloc(%lu): %p at %s(): %d, %s", size, data __tb_debug_args__); // check tb_assertf(data, "malloc(%lu) failed!", size); tb_assertf(!(((tb_size_t)data) & (TB_POOL_DATA_ALIGN - 1)), "malloc(%lu): unaligned data: %p", size, data); // leave tb_spinlock_leave(&allocator->lock); // ok? return data;}
开发者ID:siwuxian,项目名称:xmake,代码行数:26,
示例18: tb_aiop_exittb_void_t tb_aiop_exit(tb_aiop_ref_t aiop){ // check tb_aiop_impl_t* impl = (tb_aiop_impl_t*)aiop; tb_assert_and_check_return(impl); // exit reactor if (impl->rtor && impl->rtor->exit) impl->rtor->exit(impl->rtor); // exit spak if (impl->spak[0]) tb_socket_exit(impl->spak[0]); if (impl->spak[1]) tb_socket_exit(impl->spak[1]); impl->spak[0] = tb_null; impl->spak[1] = tb_null; // exit pool tb_spinlock_enter(&impl->lock); if (impl->pool) tb_fixed_pool_exit(impl->pool); impl->pool = tb_null; tb_spinlock_leave(&impl->lock); // exit lock tb_spinlock_exit(&impl->lock); // free impl tb_free(impl);}
开发者ID:cdrr,项目名称:tbox,代码行数:28,
示例19: tb_aiop_ptor_exitstatic tb_void_t tb_aiop_ptor_exit(tb_aicp_ptor_impl_t* ptor){ // check tb_aiop_ptor_impl_t* impl = (tb_aiop_ptor_impl_t*)ptor; tb_assert_and_check_return(impl); // trace tb_trace_d("exit"); // exit file tb_aicp_file_exit(impl); // exit loop if (impl->loop) { tb_long_t wait = 0; if ((wait = tb_thread_wait(impl->loop, 5000)) <= 0) { // trace tb_trace_e("loop[%p]: wait failed: %ld!", impl->loop, wait); } tb_thread_exit(impl->loop); impl->loop = tb_null; } // exit spak tb_spinlock_enter(&impl->lock); if (impl->spak[0]) tb_queue_exit(impl->spak[0]); if (impl->spak[1]) tb_queue_exit(impl->spak[1]); impl->spak[0] = tb_null; impl->spak[1] = tb_null; tb_spinlock_leave(&impl->lock); // exit aiop if (impl->aiop) tb_aiop_exit(impl->aiop); impl->aiop = tb_null; // exit list if (impl->list) tb_free(impl->list); impl->list = tb_null; // exit wait if (impl->wait) tb_semaphore_exit(impl->wait); impl->wait = tb_null; // exit timer if (impl->timer) tb_timer_exit(impl->timer); impl->timer = tb_null; // exit ltimer if (impl->ltimer) tb_ltimer_exit(impl->ltimer); impl->ltimer = tb_null; // exit lock tb_spinlock_exit(&impl->lock); // exit it tb_free(impl);}
开发者ID:RockyShi,项目名称:tbox,代码行数:59,
示例20: tb_timer_exittb_void_t tb_timer_exit(tb_timer_ref_t timer){ // check tb_timer_impl_t* impl = (tb_timer_impl_t*)timer; tb_assert_and_check_return(impl); // stop it tb_atomic_set(&impl->stop, 1); // wait loop exit tb_size_t tryn = 10; while (tb_atomic_get(&impl->work) && tryn--) tb_msleep(500); // warning if (!tryn && tb_atomic_get(&impl->work)) tb_trace_w("[timer]: the loop has been not exited now!"); // post event tb_spinlock_enter(&impl->lock); tb_event_ref_t event = impl->event; tb_spinlock_leave(&impl->lock); if (event) tb_event_post(event); // enter tb_spinlock_enter(&impl->lock); // exit heap if (impl->heap) tb_heap_exit(impl->heap); impl->heap = tb_null; // exit pool if (impl->pool) tb_fixed_pool_exit(impl->pool); impl->pool = tb_null; // exit event if (impl->event) tb_event_exit(impl->event); impl->event = tb_null; // leave tb_spinlock_leave(&impl->lock); // exit lock tb_spinlock_exit(&impl->lock); // exit it tb_free(impl);}
开发者ID:1060460048,项目名称:tbox,代码行数:46,
示例21: tb_aiop_spak_wait_timeoutstatic tb_void_t tb_aiop_spak_wait_timeout(tb_bool_t killed, tb_cpointer_t priv){ // the aico tb_aiop_aico_t* aico = (tb_aiop_aico_t*)priv; tb_assert_and_check_return(aico && aico->waiting); // the impl tb_aiop_ptor_impl_t* impl = aico->impl; tb_assert_and_check_return(impl && impl->aiop); // for sock if (aico->base.type == TB_AICO_TYPE_SOCK) { // check tb_assert_and_check_return(aico->aioo); // delo aioo tb_aiop_delo(impl->aiop, aico->aioo); aico->aioo = tb_null; } // have been waited ok for the spak loop? need not spak it repeatly tb_bool_t ok = tb_false; if (!aico->wait_ok) { // the priority tb_size_t priority = tb_aice_impl_priority(&aico->aice); tb_assert_and_check_return(priority < tb_arrayn(impl->spak) && impl->spak[priority]); // trace tb_trace_d("wait: timeout: code: %lu, priority: %lu, time: %lld", aico->aice.code, priority, tb_cache_time_mclock()); // enter tb_spinlock_enter(&impl->lock); // spak aice if (!tb_queue_full(impl->spak[priority])) { // save state aico->aice.state = killed? TB_STATE_KILLED : TB_STATE_TIMEOUT; // put it tb_queue_put(impl->spak[priority], &aico->aice); // ok ok = tb_true; aico->wait_ok = 1; } else tb_assert(0); // leave tb_spinlock_leave(&impl->lock); } // work it if (ok) tb_aiop_spak_work(impl);}
开发者ID:ZuckerB,项目名称:tbox,代码行数:57,
示例22: tb_thread_store_setptb_void_t tb_thread_store_setp(tb_thread_store_data_t const* data){ // enter lock tb_spinlock_enter(&g_lock); // get data if (g_store) tb_hash_map_insert(g_store, (tb_pointer_t)tb_thread_self(), data); // leave lock tb_spinlock_leave(&g_lock);}
开发者ID:AlexShiLucky,项目名称:tbox,代码行数:11,
示例23: tb_aiop_rtor_poll_clerstatic tb_void_t tb_aiop_rtor_poll_cler(tb_aiop_rtor_impl_t* rtor){ tb_aiop_rtor_poll_impl_t* impl = (tb_aiop_rtor_poll_impl_t*)rtor; if (impl) { // clear pfds tb_spinlock_enter(&impl->lock.pfds); if (impl->pfds) tb_vector_clear(impl->pfds); tb_spinlock_leave(&impl->lock.pfds); // clear hash tb_spinlock_enter(&impl->lock.hash); if (impl->hash) tb_hash_clear(impl->hash); tb_spinlock_leave(&impl->lock.hash); // spak it if (rtor->aiop && rtor->aiop->spak[0]) tb_socket_send(rtor->aiop->spak[0], (tb_byte_t const*)"p", 1); }}
开发者ID:DonkeyWs,项目名称:tbox,代码行数:20,
示例24: tb_mutex_entertb_bool_t tb_mutex_enter(tb_mutex_ref_t mutex){ // check tb_assert_and_check_return_val(mutex, tb_false); // enter tb_spinlock_enter((tb_spinlock_ref_t)mutex); // ok return tb_true;}
开发者ID:waruqi,项目名称:tbox,代码行数:11,
示例25: tb_timer_looptb_void_t tb_timer_loop(tb_timer_ref_t timer){ // check tb_timer_impl_t* impl = (tb_timer_impl_t*)timer; tb_assert_and_check_return(impl); // work++ tb_atomic_fetch_and_inc(&impl->work); // init event tb_spinlock_enter(&impl->lock); if (!impl->event) impl->event = tb_event_init(); tb_spinlock_leave(&impl->lock); // loop while (!tb_atomic_get(&impl->stop)) { // the delay tb_size_t delay = tb_timer_delay(timer); if (delay) { // the event tb_spinlock_enter(&impl->lock); tb_event_ref_t event = impl->event; tb_spinlock_leave(&impl->lock); tb_check_break(event); // wait some time if (tb_event_wait(event, delay) < 0) break; } // spak ctime if (impl->ctime) tb_cache_time_spak(); // spak it if (!tb_timer_spak(timer)) break; } // work-- tb_atomic_fetch_and_dec(&impl->work);}
开发者ID:1060460048,项目名称:tbox,代码行数:41,
示例26: tb_aiop_rtor_poll_addostatic tb_bool_t tb_aiop_rtor_poll_addo(tb_aiop_rtor_impl_t* rtor, tb_aioo_impl_t const* aioo){ // check tb_aiop_rtor_poll_impl_t* impl = (tb_aiop_rtor_poll_impl_t*)rtor; tb_assert_and_check_return_val(impl && impl->pfds && impl->cfds && aioo && aioo->sock, tb_false); // the aiop tb_aiop_impl_t* aiop = rtor->aiop; tb_assert_and_check_return_val(aiop, tb_false); // add sock => aioo tb_bool_t ok = tb_false; tb_spinlock_enter(&impl->lock.hash); if (impl->hash) { tb_hash_set(impl->hash, aioo->sock, aioo); ok = tb_true; } tb_spinlock_leave(&impl->lock.hash); tb_assert_and_check_return_val(ok, tb_false); // the code tb_size_t code = aioo->code; // init pfd struct pollfd pfd = {0}; pfd.fd = ((tb_long_t)aioo->sock) - 1; if (code & TB_AIOE_CODE_RECV || code & TB_AIOE_CODE_ACPT) pfd.events |= POLLIN; if (code & TB_AIOE_CODE_SEND || code & TB_AIOE_CODE_CONN) pfd.events |= POLLOUT; // add pfd, TODO: addo by binary search tb_spinlock_enter(&impl->lock.pfds); tb_vector_insert_tail(impl->pfds, &pfd); tb_spinlock_leave(&impl->lock.pfds); // spak it if (aiop->spak[0] && code) tb_socket_send(aiop->spak[0], (tb_byte_t const*)"p", 1); // ok? return ok;}
开发者ID:DonkeyWs,项目名称:tbox,代码行数:41,
示例27: tb_thread_store_exittb_void_t tb_thread_store_exit(){ // enter lock tb_spinlock_enter(&g_lock); // exit store if (g_store) tb_hash_map_exit(g_store); g_store = tb_null; // leave lock tb_spinlock_leave(&g_lock);}
开发者ID:AlexShiLucky,项目名称:tbox,代码行数:12,
注:本文中的tb_spinlock_enter函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ tb_spinlock_leave函数代码示例 C++ tb_mclock函数代码示例 |