本文整理汇总了C++中Thread::Construct方法的典型用法代码示例。如果您正苦于以下问题:C++ Thread::Construct方法的具体用法?C++ Thread::Construct怎么用?C++ Thread::Construct使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Thread
的用法示例。
在下文中一共展示了Thread::Construct方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AttachCurrentThread
// static
void ThreadStore::AttachCurrentThread(bool fAcquireThreadStoreLock)
{
//
// step 1: ThreadStore::InitCurrentThread
// step 2: add this thread to the ThreadStore
//
// The thread has been constructed, during which some data is initialized (like which RuntimeInstance the
// thread belongs to), but it hasn't been added to the thread store because doing so takes a lock, which
// we want to avoid at construction time because the loader lock is held then.
Thread * pAttachingThread = RawGetCurrentThread();
// On CHK build, validate that our GetThread assembly implementation matches the C++ implementation using
// TLS.
CreateCurrentThreadBuffer();
ASSERT(_fls_index != FLS_OUT_OF_INDEXES);
Thread* pThreadFromCurrentFiber = (Thread*)PalFlsGetValue(_fls_index);
if (pAttachingThread->IsInitialized())
{
if (pThreadFromCurrentFiber != pAttachingThread)
{
ASSERT_UNCONDITIONALLY("Multiple fibers encountered on a single thread");
RhFailFast();
}
return;
}
if (pThreadFromCurrentFiber != NULL)
{
ASSERT_UNCONDITIONALLY("Multiple threads encountered from a single fiber");
RhFailFast();
}
//
// Init the thread buffer
//
pAttachingThread->Construct();
ASSERT(pAttachingThread->m_ThreadStateFlags == Thread::TSF_Unknown);
ThreadStore* pTS = GetThreadStore();
ReaderWriterLock::WriteHolder write(&pTS->m_Lock, fAcquireThreadStoreLock);
//
// Set thread state to be attached
//
ASSERT(pAttachingThread->m_ThreadStateFlags == Thread::TSF_Unknown);
pAttachingThread->m_ThreadStateFlags = Thread::TSF_Attached;
pTS->m_ThreadList.PushHead(pAttachingThread);
//
// Associate the current fiber with the current thread. This makes the current fiber the thread's "home"
// fiber. This fiber is the only fiber allowed to execute managed code on this thread. When this fiber
// is destroyed, we consider the thread to be destroyed.
//
PalFlsSetValue(_fls_index, pAttachingThread);
}
示例2: AttachCurrentThread
// static
void ThreadStore::AttachCurrentThread(bool fAcquireThreadStoreLock)
{
//
// step 1: ThreadStore::InitCurrentThread
// step 2: add this thread to the ThreadStore
//
// The thread has been constructed, during which some data is initialized (like which RuntimeInstance the
// thread belongs to), but it hasn't been added to the thread store because doing so takes a lock, which
// we want to avoid at construction time because the loader lock is held then.
Thread * pAttachingThread = RawGetCurrentThread();
// On CHK build, validate that our GetThread assembly implementation matches the C++ implementation using
// TLS.
CreateCurrentThreadBuffer();
// The thread was already initialized, so it is already attached
if (pAttachingThread->IsInitialized())
{
return;
}
PalAttachThread(pAttachingThread);
//
// Init the thread buffer
//
pAttachingThread->Construct();
ASSERT(pAttachingThread->m_ThreadStateFlags == Thread::TSF_Unknown);
// The runtime holds the thread store lock for the duration of thread suspension for GC, so let's check to
// see if that's going on and, if so, use a proper wait instead of the RWL's spinning. NOTE: when we are
// called with fAcquireThreadStoreLock==false, we are being called in a situation where the GC is trying to
// init a GC thread, so we must honor the flag to mean "do not block on GC" or else we will deadlock.
if (fAcquireThreadStoreLock && (RhpTrapThreads != 0))
RedhawkGCInterface::WaitForGCCompletion();
ThreadStore* pTS = GetThreadStore();
ReaderWriterLock::WriteHolder write(&pTS->m_Lock, fAcquireThreadStoreLock);
//
// Set thread state to be attached
//
ASSERT(pAttachingThread->m_ThreadStateFlags == Thread::TSF_Unknown);
pAttachingThread->m_ThreadStateFlags = Thread::TSF_Attached;
pTS->m_ThreadList.PushHead(pAttachingThread);
}
示例3: pthread_create
int pthread_create(pthread_t*__threadarg,
const pthread_attr_t*__attr,
void*(*__start_routine)(void *),
void*__arg)
{
if (NULL == __threadarg)
{
return -1;
}
Thread *thread = new Thread();
RunnableProxy *proxy = new RunnableProxy();
proxy->SetFunc(__start_routine);
proxy->SetParameter(__arg);
thread->Construct(*proxy);
*__threadarg = thread;
return (int)thread->Start();
}
示例4: AttachCurrentThread
// static
void ThreadStore::AttachCurrentThread(bool fAcquireThreadStoreLock)
{
//
// step 1: ThreadStore::InitCurrentThread
// step 2: add this thread to the ThreadStore
//
// The thread has been constructed, during which some data is initialized (like which RuntimeInstance the
// thread belongs to), but it hasn't been added to the thread store because doing so takes a lock, which
// we want to avoid at construction time because the loader lock is held then.
Thread * pAttachingThread = RawGetCurrentThread();
// On CHK build, validate that our GetThread assembly implementation matches the C++ implementation using
// TLS.
CreateCurrentThreadBuffer();
// The thread was already initialized, so it is already attached
if (pAttachingThread->IsInitialized())
{
return;
}
PalAttachThread(pAttachingThread);
//
// Init the thread buffer
//
pAttachingThread->Construct();
ASSERT(pAttachingThread->m_ThreadStateFlags == Thread::TSF_Unknown);
ThreadStore* pTS = GetThreadStore();
ReaderWriterLock::WriteHolder write(&pTS->m_Lock, fAcquireThreadStoreLock);
//
// Set thread state to be attached
//
ASSERT(pAttachingThread->m_ThreadStateFlags == Thread::TSF_Unknown);
pAttachingThread->m_ThreadStateFlags = Thread::TSF_Attached;
pTS->m_ThreadList.PushHead(pAttachingThread);
}