예제 #1
0
파일: thread_pool.c 프로젝트: luxuan/tbox
static tb_void_t tb_thread_pool_worker_post(tb_thread_pool_impl_t* impl, tb_size_t post)
{
    // check
    tb_assert_and_check_return(impl && impl->semaphore);

    // the semaphore value
    tb_long_t value = tb_semaphore_value(impl->semaphore);

    // post wait
    if (value >= 0 && (tb_size_t)value < post) 
        tb_semaphore_post(impl->semaphore, post - value);
}
예제 #2
0
파일: aicp_aiop.c 프로젝트: ZuckerB/tbox
static tb_void_t tb_aiop_spak_work(tb_aiop_ptor_impl_t* impl)
{
    // check
    tb_assert_and_check_return(impl && impl->wait && impl->base.aicp);

    // the worker size
    tb_size_t work = tb_atomic_get(&impl->base.aicp->work);

    // the semaphore value
    tb_long_t value = tb_semaphore_value(impl->wait);

    // post wait
    if (value >= 0 && value < work) tb_semaphore_post(impl->wait, work - value);
}