美文网首页
c++同步任务队列的实现

c++同步任务队列的实现

作者: help_youself | 来源:发表于2020-02-28 20:49 被阅读0次

 代码来源[1]。

    long STaskLoop::postTask(const IRunnable *runnable, bool waitUntilDone, int priority)
    {
        if (m_thread.isStopped())
        {
            return -1;
        }
        IRunnable *pCloneRunnable = runnable->clone();
        if (Thread::getCurrentThreadID() == m_thread.getThreadID() && waitUntilDone)
        {
            pCloneRunnable->run();
            delete pCloneRunnable;
            return -1;
        }

        SSemaphore semaphore;
        TaskItem item(pCloneRunnable,priority);

        if (waitUntilDone)
        {
            item.semaphore = &semaphore;
        }

        m_taskListLock.Enter();

        item.taskID = m_nextTaskID;
        m_nextTaskID = (m_nextTaskID + 1) & ((std::numeric_limits<long>::max)());
        std::list<TaskItem>::reverse_iterator it= m_items.rbegin();
        while(it != m_items.rend())
        {
            if(it->nPriority>=priority)
            {
                m_items.insert(it.base(),item);
                break;
            }
            it ++;
        }
        if(it==m_items.rend())
            m_items.push_front(item);

        m_taskListLock.Leave();
        m_itemsSem.notify();

        if (waitUntilDone)
        {
            int ret = semaphore.wait();

            if (ret == RETURN_ERROR)
            {
            }
        }

        return item.taskID;
    }

 之前有分析过webrtc中invoke函数的实现[2]。
[1] TaskLoop.cpp
[2] 从webrtc的Thread::Invoke谈起

相关文章

  • c++同步任务队列的实现

     代码来源[1]。  之前有分析过webrtc中invoke函数的实现[2]。[1] TaskLoop.cpp[2...

  • iOS 多线程之GCD

    GCD核心概念 任务 :执行的操作 队列 :执行任务的等待队列 任务 同步执行 :同步添加任务到指定的队列中,如果...

  • js运行机制

    在运行时会形成任务队列,分为同步任务队列和异步任务对列,同步队列优先加载异步任务队列会形成队列任务池,定时器不会一...

  • c++ 任务队列实现

  • 多线程

    iOS中的几种多线程GCD1、GCD分为任务和队列,任务(同步,异步)队列(串行,并发),同步串行,同步主队列的情...

  • GCD小总结

    单例模式 串行队列同步/异步执行任务 并发队列同步/异步执行任务 队列组 延时执行 barrier

  • c++ 实现队列

    相关资料: 用C++实现一个队列 数据结构代码实现之队列的链表实现(C/C++)

  • GCD的学习笔记(One)

    并行和并发 GCD简介 GCD的任务 GCD的队列 GCD创建队列或获取队列的方法 任务的执行方式:同步执行(同步...

  • GCD 死锁案例分析

    案例一:主队列,同步线程 任务1执行后,同步线程任务2加到主队列中,任务3会等待任务2执行完成后执行 对于队列,有...

  • iOSIN-GCD

    队列和同步异步 区别并行队列串行队列主队列同步(sync)没有开启新线程,串行执行任务没有开启新线程,串行执行任务...

网友评论

      本文标题:c++同步任务队列的实现

      本文链接:https://www.haomeiwen.com/subject/hqvrhhtx.html