• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ AcquireSRWLockExclusive函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中AcquireSRWLockExclusive函数的典型用法代码示例。如果您正苦于以下问题:C++ AcquireSRWLockExclusive函数的具体用法?C++ AcquireSRWLockExclusive怎么用?C++ AcquireSRWLockExclusive使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了AcquireSRWLockExclusive函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: AcquireSRWLockExclusive

BOOL CRWLockSlim::AcquireWriterLock( DWORD dwTimeout )
{
    BOOL bRet = FALSE;

#if ( _WIN32_WINNT_WIN7 <= _WIN32_WINNT )
    if ( INFINITE == dwTimeout || FALSE == m_bWin7AndLater )
    {
        AcquireSRWLockExclusive( &m_srwLock );
        bRet = TRUE;
    }
    else
    {
        LARGE_INTEGER lnCurr , lnEnd;
        QueryPerformanceCounter( &lnCurr );
        lnEnd.QuadPart = lnCurr.QuadPart + dwTimeout * ( m_lnFreq.QuadPart / 1000 );
        do
        {
            QueryPerformanceCounter( &lnCurr );
            bRet = (BOOL)TryAcquireSRWLockExclusive( &m_srwLock );
        } while ( lnCurr.QuadPart < lnEnd.QuadPart );
    }
#else
    AcquireSRWLockExclusive( &m_srwLock );
    bRet = TRUE;
#endif

    return bRet;
}
开发者ID:winest,项目名称:CWUtils,代码行数:28,代码来源:CWLock.cpp


示例2: TRI_LockMutex

void TRI_LockMutex (TRI_mutex_t* mutex) {
  // as of VS2013, exclusive SRWLocks tend to be faster than native mutexes
#if TRI_WINDOWS_VISTA_LOCKS
  DWORD result = WaitForSingleObject(mutex->_mutex, INFINITE);

  switch (result) {
    case WAIT_ABANDONED: {
      LOG_FATAL_AND_EXIT("locks-win32.c:TRI_LockMutex:could not lock the condition --> WAIT_ABANDONED");
    }

    case WAIT_OBJECT_0: {
      // everything ok
      break;
    }

    case WAIT_TIMEOUT: {
      LOG_FATAL_AND_EXIT("locks-win32.c:TRI_LockMutex:could not lock the condition --> WAIT_TIMEOUT");
    }

    case WAIT_FAILED: {
      result = GetLastError();
      LOG_FATAL_AND_EXIT("locks-win32.c:TRI_LockMutex:could not lock the condition --> WAIT_FAILED - reason -->%d",result);
    }
  }
#else
  AcquireSRWLockExclusive(&mutex->_mutex);
#endif
}
开发者ID:CoDEmanX,项目名称:ArangoDB,代码行数:28,代码来源:locks-win32.cpp


示例3: cache_insert

static int cache_insert(
    struct idmap_cache *cache,
    const struct idmap_lookup *lookup,
    const struct list_entry *src)
{
    struct list_entry *entry;
    int status = NO_ERROR;

    AcquireSRWLockExclusive(&cache->lock);

    /* search for an existing match */
    entry = list_search(&cache->head, lookup->value, lookup->compare);
    if (entry) {
        /* overwrite the existing entry with the new results */
        cache->ops->entry_copy(entry, src);
        goto out;
    }

    /* initialize a new entry and add it to the list */
    entry = cache->ops->entry_alloc();
    if (entry == NULL) {
        status = GetLastError();
        goto out;
    }
    cache->ops->entry_copy(entry, src);
    list_add_head(&cache->head, entry);
out:
    ReleaseSRWLockExclusive(&cache->lock);
    return status;
}
开发者ID:AchillesA,项目名称:ms-nfs41-client,代码行数:30,代码来源:idmap.c


示例4: __MCF_CRT_TlsThreadCleanup

void __MCF_CRT_TlsThreadCleanup(){
	ThreadMap *const pMap = TlsGetValue(g_dwTlsIndex);
	if(pMap){
		TlsObject *pObject = pMap->pLastByThread;
		while(pObject){
			TlsKey *const pKey = pObject->pKey;

			AcquireSRWLockExclusive(&(pKey->srwLock));
			{
				if(pKey->pLastByKey == pObject){
					pKey->pLastByKey = pObject->pPrevByKey;
				}
			}
			ReleaseSRWLockExclusive(&(pKey->srwLock));

			if(pKey->pfnCallback){
				(*pKey->pfnCallback)(pObject->nValue);
			}

			TlsObject *const pTemp = pObject->pPrevByThread;
			free(pObject);
			pObject = pTemp;
		}
		free(pMap);
		TlsSetValue(g_dwTlsIndex, nullptr);
	}

	__MCF_CRT_RunEmutlsDtors();
}
开发者ID:Gd58,项目名称:MCF,代码行数:29,代码来源:thread.c


示例5: AcquireSRWLockExclusive

				_EXP_IMPL void __cdecl Event::set()
				{
					AcquireSRWLockExclusive(reinterpret_cast<PSRWLOCK>(&m_lock));
					m_isSet = true;
					WakeAllConditionVariable(reinterpret_cast<PCONDITION_VARIABLE>(&m_cond));
					ReleaseSRWLockExclusive(reinterpret_cast<PSRWLOCK>(&m_lock));
				}
开发者ID:kusl,项目名称:parallelstl,代码行数:7,代码来源:event.cpp


示例6: virtualfs_text_llseek

static int virtualfs_text_llseek(struct file *f, loff_t offset, loff_t *newoffset, int whence)
{
	AcquireSRWLockExclusive(&f->rw_lock);
	struct virtualfs_text *file = (struct virtualfs_text *)f;
	loff_t target;
	int r;
	switch (whence)
	{
	case SEEK_SET: target = offset; break;
	case SEEK_CUR: target = file->position + offset; break;
	case SEEK_END: target = file->textlen - offset; break;
	default: r = -L_EINVAL; goto out;
	}
	if (target >= 0 && target < file->textlen)
	{
		file->position = (int)target;
		*newoffset = target;
		r = 0;
	}
	else
		r = -L_EINVAL;
out:
	ReleaseSRWLockExclusive(&f->rw_lock);
	return r;
}
开发者ID:AnXi-TieGuanYin-Tea,项目名称:flinux,代码行数:25,代码来源:virtual.c


示例7: AcquireSRWLockExclusive

BOOST_LOG_API bool once_block_sentry::enter_once_block() const
{
    AcquireSRWLockExclusive(&g_OnceBlockMutex);

    once_block_flag volatile& flag = m_Flag;
    while (flag.status != once_block_flag::initialized)
    {
        if (flag.status == once_block_flag::uninitialized)
        {
            flag.status = once_block_flag::being_initialized;
            ReleaseSRWLockExclusive(&g_OnceBlockMutex);

            // Invoke the initializer block
            return false;
        }
        else
        {
            while (flag.status == once_block_flag::being_initialized)
            {
                BOOST_VERIFY(SleepConditionVariableSRW(
                    &g_OnceBlockCond, &g_OnceBlockMutex, INFINITE, 0));
            }
        }
    }

    ReleaseSRWLockExclusive(&g_OnceBlockMutex);

    return true;
}
开发者ID:Fabiz,项目名称:log,代码行数:29,代码来源:once_block.cpp


示例8: AcquireSRWLockExclusive

VOID
APPLICATION_INFO::ShutDownApplication()
{
    APPLICATION* pApplication = NULL;
    BOOL         fLockAcquired = FALSE;

    // pApplication can be NULL due to app_offline
    if (m_pApplication != NULL)
    {
        AcquireSRWLockExclusive(&m_srwLock);
        fLockAcquired = TRUE;
        if (m_pApplication != NULL)
        {
            pApplication = m_pApplication;

            // Set m_pApplication to NULL first to prevent anyone from using it
            m_pApplication = NULL;
            pApplication->ShutDown();
            pApplication->DereferenceApplication();
        }

        if (fLockAcquired)
        {
            ReleaseSRWLockExclusive(&m_srwLock);
        }
    }
}
开发者ID:akrisiun,项目名称:IISIntegration,代码行数:27,代码来源:applicationinfo.cpp


示例9: server_addrs_add

static void server_addrs_add(
    IN OUT struct server_addrs *addrs,
    IN const netaddr4 *addr)
{
    /* we keep a list of addrs used to connect to each server. once it gets
     * bigger than NFS41_ADDRS_PER_SERVER, overwrite the oldest addrs. use
     * server_addrs.next_index to implement a circular array */

    AcquireSRWLockExclusive(&addrs->lock);

    if (multi_addr_find(&addrs->addrs, addr, NULL)) {
        dprintf(SRVLVL, "server_addrs_add() found existing addr '%s'.\n",
            addr->uaddr);
    } else {
        /* overwrite the address at 'next_index' */
        StringCchCopyA(addrs->addrs.arr[addrs->next_index].netid,
            NFS41_NETWORK_ID_LEN+1, addr->netid);
        StringCchCopyA(addrs->addrs.arr[addrs->next_index].uaddr,
            NFS41_UNIVERSAL_ADDR_LEN+1, addr->uaddr);

        /* increment/wrap next_index */
        addrs->next_index = (addrs->next_index + 1) % NFS41_ADDRS_PER_SERVER;
        /* update addrs.count if necessary */
        if (addrs->addrs.count < addrs->next_index)
            addrs->addrs.count = addrs->next_index;

        dprintf(SRVLVL, "server_addrs_add() added new addr '%s'.\n",
            addr->uaddr);
    }
    ReleaseSRWLockExclusive(&addrs->lock);
}
开发者ID:AchillesA,项目名称:ms-nfs41-client,代码行数:31,代码来源:nfs41_server.c


示例10: open_unlock_delegate

static int open_unlock_delegate(
    IN nfs41_open_state *open,
    IN const nfs41_lock_state *input)
{
    struct list_entry *entry;
    int status = ERROR_NOT_LOCKED;

    AcquireSRWLockExclusive(&open->lock);

    /* find lock state that matches this range */
    entry = list_search(&open->locks.list, input, lock_range_cmp);
    if (entry) {
        nfs41_lock_state *lock = lock_entry(entry);
        if (lock->delegated) {
            /* if the lock was delegated, remove/free it and return success */
            list_remove(entry);
            free(lock);
            status = NO_ERROR;
        } else
            status = ERROR_LOCKED;
    }

    ReleaseSRWLockExclusive(&open->lock);
    return status;
}
开发者ID:AchillesA,项目名称:ms-nfs41-client,代码行数:25,代码来源:lock.c


示例11: belle_sip_mutex_lock

int belle_sip_mutex_lock(belle_sip_mutex_t * hMutex) {
#ifdef BELLE_SIP_WINDOWS_DESKTOP
	WaitForSingleObject(*hMutex, INFINITE);
#else
	AcquireSRWLockExclusive(hMutex);
#endif
	return 0;
}
开发者ID:Distrotech,项目名称:belle-sip,代码行数:8,代码来源:port.c


示例12: AcquireSRWLockExclusive

/// <summary>
/// Locks for writing.
/// </summary>
void RWLock::LockWrite()
{
#ifdef PLATFORM_WIN
	AcquireSRWLockExclusive( &mRwlock );
#else
	pthread_rwlock_wrlock( &mRwlock );
#endif
}
开发者ID:Inch4Tk,项目名称:ModernDB2016SS,代码行数:11,代码来源:RWLock.cpp


示例13: mutex_lock

int mutex_lock(struct mutex_handle *mutex)
{
	struct mutex_priv *priv = (struct mutex_priv *)mutex->priv;

	AcquireSRWLockExclusive(&priv->lock);

	return 0;
}
开发者ID:cottsay,项目名称:openelp,代码行数:8,代码来源:mutex_win.c


示例14: MCF_CRT_TlsFreeKey

bool MCF_CRT_TlsFreeKey(void *pTlsKey){
	TlsKey *const pKey = pTlsKey;
	if(!pKey){
		SetLastError(ERROR_INVALID_PARAMETER);
		return false;
	}

	AcquireSRWLockExclusive(&g_csKeyMutex);
	{
		MCF_AvlDetach((MCF_AvlNodeHeader *)pKey);
	}
	ReleaseSRWLockExclusive(&g_csKeyMutex);

	TlsObject *pObject = pKey->pLastByKey;
	while(pObject){
		ThreadMap *const pMap = pObject->pMap;

		AcquireSRWLockExclusive(&(pMap->srwLock));
		{
			TlsObject *const pPrev = pObject->pPrevByThread;
			TlsObject *const pNext = pObject->pNextByThread;
			if(pPrev){
				pPrev->pNextByThread = pNext;
			}
			if(pNext){
				pNext->pPrevByThread = pPrev;
			}

			if(pMap->pLastByThread == pObject){
				pMap->pLastByThread = pObject->pPrevByThread;
			}
		}
		ReleaseSRWLockExclusive(&(pMap->srwLock));

		if(pKey->pfnCallback){
			(*pKey->pfnCallback)(pObject->nValue);
		}

		TlsObject *const pTemp = pObject->pPrevByKey;
		free(pObject);
		pObject = pTemp;
	}
	free(pKey);

	return true;
}
开发者ID:Gd58,项目名称:MCF,代码行数:46,代码来源:thread.c


示例15: GetCurrentThreadId

 // the code below in _DEBUG build will check that we don't try to recursively lock, 
 // which is not supported by this class.  also checks that you don't unlock without 
 // having locked
 void SimpleRWLock::lock() {
     unsigned me = GetCurrentThreadId();
     int& state = s.getRef();
     dassert( state == 0 );
     state--;
     AcquireSRWLockExclusive(&_lock);
     tid = me; // this is for use in the debugger to see who does have the lock
 }
开发者ID:2812140729,项目名称:robomongo,代码行数:11,代码来源:rwlockimpl.cpp


示例16: qemu_mutex_lock_impl

void qemu_mutex_lock_impl(QemuMutex *mutex, const char *file, const int line)
{
    assert(mutex->initialized);
    trace_qemu_mutex_lock(mutex, file, line);

    AcquireSRWLockExclusive(&mutex->lock);
    trace_qemu_mutex_locked(mutex, file, line);
}
开发者ID:CRYP706URU,项目名称:pyrebox,代码行数:8,代码来源:qemu-thread-win32.c


示例17: AcquireSRWLockExclusive

	void ui::remove(char type)
	{
		AcquireSRWLockExclusive(&uilock);

		delete elements[type];
		elements.erase(type);

		ReleaseSRWLockExclusive(&uilock);
	}
开发者ID:dreamsxin,项目名称:journey_client,代码行数:9,代码来源:ui.cpp


示例18: pthread_rwlock_wrlock

int
pthread_rwlock_wrlock(pthread_rwlock_t *rwlock)
{
	AcquireSRWLockExclusive(&rwlock->rwlock);

	rwlock->exclusive_locked = GetCurrentThreadId();

	return (0);
}
开发者ID:ajdavis,项目名称:mongo,代码行数:9,代码来源:windows_shim.c


示例19: WorkerThread

//worker thread
DWORD WINAPI WorkerThread(LPVOID lpParam)
{
    CSocketSever* pSocketServer = (CSocketSever*)lpParam;
    int i = 0;
    fd_set fdread;
    struct timeval tv = {0, 50};
    char szMessage[nMsgSize];
    memset(szMessage, 0, nMsgSize);
    while(TRUE)
    {
        // set fdread初始化为空
        FD_ZERO(&fdread);
        for(i = 0; i < pSocketServer->m_iTotalConn; i++)
                //将client socket加入fdread set
                FD_SET(pSocketServer->m_ClientSocketArr[i], &fdread);
        int ret = select(0, &fdread, NULL, NULL, &tv);
        if (ret == 0)
        {
            // Time expired 
            continue;
        }
        for(i = 0; i < pSocketServer->m_iTotalConn; i++)
        {
           if( FD_ISSET( pSocketServer->m_ClientSocketArr[i], &fdread ) )
            {
                    memset(szMessage, 0, nMsgSize);
                    ret = recv(pSocketServer->m_ClientSocketArr[i], szMessage, nMsgSize,0);
                    if ( ret == 0 || ( ret == SOCKET_ERROR && WSAGetLastError() ) )
                    {
                            //Client socket closed
                            cout << "Client socket " << pSocketServer->m_ClientSocketArr[i] << "closed." << endl;
                            closesocket( pSocketServer->m_ClientSocketArr[i]);
                            pSocketServer->m_ClientSocketArr[i--] = pSocketServer->m_ClientSocketArr[--pSocketServer->m_iTotalConn];
                    }
                    else
                    {
                            string heart = szMessage;
                            if (heart.find("心跳包") != heart.npos)
                            {
                                //cout << szMessage << endl;
                                continue;
                            }
                            //接入业务处理部分
                            g_pos = strlen(LogBuffer);
                            AcquireSRWLockExclusive(&srwTest);
                            sprintf(LogBuffer + g_pos, "%s\n", szMessage);
                            ReleaseSRWLockExclusive(&srwTest);

                            pSocketServer->m_pRTHandleData->GetClientSocket(pSocketServer->m_ClientSocketArr[i]);
                            pSocketServer->m_pRTHandleData->HandleData(szMessage, ret); 

                    }
            }
        }
    }
    return 0;
}
开发者ID:meigu,项目名称:meigu,代码行数:58,代码来源:SocketSever.cpp


示例20: ts_tree_add

int ts_tree_add(ts_tree_t* ts_tree, ts_tree_node_t* node, uintptr_t key) {
  int r;

  AcquireSRWLockExclusive(&ts_tree->lock);
  r = tree_add(&ts_tree->tree, &node->tree_node, key);
  ReleaseSRWLockExclusive(&ts_tree->lock);

  return r;
}
开发者ID:piscisaureus,项目名称:epoll_windows,代码行数:9,代码来源:thread-safe-tree.c



注:本文中的AcquireSRWLockExclusive函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ AcquireSemaphoreInfo函数代码示例发布时间:2022-05-30
下一篇:
C++ AcquireQuantumMemory函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap