android Thread class

 

system/core/libutils/include/utils/Thread.h
system/core/libutils/Threads.cpp

status_t Thread::run(const char* name, int32_t priority, size_t stack)
665{
666    LOG_ALWAYS_FATAL_IF(name == nullptr, "thread name not provided to Thread::run");
667
668    Mutex::Autolock _l(mLock);
669
670    if (mRunning) {
671        // thread already started
672        return INVALID_OPERATION;
673    }
674
675    // reset status and exitPending to their default value, so we can
676    // try again after an error happened (either below, or in readyToRun())
677    mStatus = OK;
678    mExitPending = false;
679    mThread = thread_id_t(-1);
680
681    // hold a strong reference on ourself
682    mHoldSelf = this;
683
684    mRunning = true;
685
686    bool res;
687    if (mCanCallJava) {
688        res = createThreadEtc(_threadLoop,
689                this, name, priority, stack, &mThread);
690    } else {
691        res = androidCreateRawThreadEtc(_threadLoop,
692                this, name, priority, stack, &mThread);
693    }
694
695    if (res == false) {
696        mStatus = UNKNOWN_ERROR;   // something happened!
697        mRunning = false;
698        mThread = thread_id_t(-1);
699        mHoldSelf.clear();  // "this" may have gone away after this.
700
701        return UNKNOWN_ERROR;
702    }
703
704    // Do not refer to mStatus here: The thread is already running (may, in fact
705    // already have exited with a valid mStatus result). The OK indication
706    // here merely indicates successfully starting the thread and does not
707    // imply successful termination/execution.
708    return OK;
709
710    // Exiting scope of mLock is a memory barrier and allows new thread to run
711}

 

posted @ 2019-11-27 13:34  aspirs  阅读(174)  评论(0编辑  收藏  举报