当前位置: 首页 > news >正文

华亭县门户网站代运营公司哪家好一些

华亭县门户网站,代运营公司哪家好一些,网站只做优化,网站后台需求概述: semaphores 的说明和使用 微软官方文档: Semaphore Objects - Win32 apps | Microsoft Learn Semaphores是解决各种 producer/consumer问题的关键要素。这种问题会存有一个缓冲区,可能在同一时间内被读出数据或被写入数据。 理论可以证…

概述: semaphores 的说明和使用

微软官方文档:

  • Semaphore Objects - Win32 apps | Microsoft Learn

Semaphores是解决各种 producer/consumer问题的关键要素。这种问题会存有一个缓冲区,可能在同一时间内被读出数据或被写入数据。

理论可以证明,mutex 是 semaphore 的一种退化。如果你产生一个semaphore 并令最大值为1,那就是一个 mutex。也因此, mutex又常被称为binary semaphore。在许多系统中, semaphores 常被使用, 因为 mutexes可能并不存在。在Win32中semaphores 被使用的情况就少得多,因为 mutex 存在的缘故。

创建 semaphore

createSemaphoreA 函数 (winbase.h) - Win32 apps | Microsoft Learn

HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpAttributes,	// 安全属性, 可以设置NULLLONG lInitialCount,	// 初始值, [0, lMaximumCount]LONG lMaximumCount,	// 最大值, 这也就是在同一时间内能够锁住semaphore之线程的最多个数LPCTSTR lpName		// 名称, 其他线程或进程可以根据名称引用该信号量; NULL则产生无名称信号量
);

如果成功就传回一个handle, 否则传回NULL. 不论哪一种情况,GetLastError()都会传回一个合理的结果. 如果指定的semaphore名称已经存在,则该函数还是成功的, GetLastError()会传回ERROR_ALREADY_EXISTS.

获得 semaphore

通过信号量名,获得信号量对象句柄

OpenSemaphoreW function (synchapi.h) - Win32 apps | Microsoft Learn

HANDLE OpenSemaphoreW([in] DWORD   dwDesiredAccess, // 访问权限,一般传入 SEMAPHORE_ALL_ACCESS [in] BOOL    bInheritHandle, // 信号量句柄继承性,一般传入TRUE即可[in] LPCWSTR lpName // 名称,不同进程中个线程可以通过名称来确保它们访问同一个信号量
);

semaphore的现值代表的意义是目前可用的资源数, 如果semaphore的现值为1, 表示还有一个锁定动作可以成功; 如果现值为5, 就表示还有五个锁定动作可以成功. 每当一个锁定动作成功, semaphore的现值就会减1. 你可以使用任何一种 Wait() 函数(例如 WaitForSingleObject() )要求锁定一个semaphore. 因此, 如果semaphore的现值不为0, Wait() 函数会立刻返回.
一个线程可以反复调用 Wait() 函数以产生新的锁定. 这和mutex绝不相同:拥有mutex的线程不论再调用多少次 Wait() 函数, 也不会被阻塞住。
一旦semaphore的现值降到0, 就表示资源已经耗尽. 此时, 任何线程如果调用Wait…()函数, 必然要等待, 直到某个锁定被解除为止.

解除 semaphore

释放信号量

ReleaseSemaphore function (synchapi.h) - Win32 apps | Microsoft Learn

注:传入的句柄必须有 SEMAPHORE_MODIFY_STATE 权限,参考 同步对象安全性和访问权限 - Win32 apps | Microsoft Learn

BOOL ReleaseSemaphore([in]            HANDLE hSemaphore, // 信号量的句柄[in]            LONG   lReleaseCount, // 表示增加个数,必须大于0且不超过最大资源数量[out, optional] LPLONG lpPreviousCount // 可以用来传出先前的资源计数,设为NULL表示不需要传出
);

ReleaseSemaphore函数会触发WaitForSingleObject函数。ReleaseSemaphore函数用于释放一个信号量对象的计数,而WaitForSingleObject函数用于等待一个信号量对象的计数。当ReleaseSemaphore函数被调用时,它会将信号量对象的计数增加,并且如果有一个线程正在等待这个信号量对象的计数,那么这个线程就会被唤醒。因此,ReleaseSemaphore函数会触发WaitForSingleObject函数。

补充说明

为什么 semaphore 要有一个初值

CreateSemaphore()的第二个参数是lInitialCount, 它的存在理由和CreateMutex()的bInitialOwner参数的存在理由是一样的. 如果你把初值设定为0, 你的线程就可以在产生semaphore之后进行所有必要的初始化工作. 待初始化工作完成后, 调用 ReleaseSemaphore()就可以把现值增加到其最大可能值.

Demo 多线程同步

#include <stdio.h>  
#include <process.h>  
#include <windows.h>  
long g_nNum;
unsigned int __stdcall Fun(void* pPM);
const int THREAD_NUM = 10;
//信号量与关键段  
HANDLE            g_hThreadParameter;
CRITICAL_SECTION  g_csThreadCode;
int main()
{printf("     经典线程同步 信号量Semaphore\n");printf(" -- by MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");//初始化信号量和关键段  g_hThreadParameter = CreateSemaphore(NULL, 0, 1, NULL);//当前0个资源,最大允许1个同时访问  InitializeCriticalSection(&g_csThreadCode);HANDLE  handle[THREAD_NUM];g_nNum = 0;int i = 0;while (i < THREAD_NUM){handle[i] = (HANDLE)_beginthreadex(NULL, 0, Fun, &i, 0, NULL);WaitForSingleObject(g_hThreadParameter, INFINITE);//等待信号量>0  ++i;}WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);//销毁信号量和关键段  DeleteCriticalSection(&g_csThreadCode);CloseHandle(g_hThreadParameter);for (i = 0; i < THREAD_NUM; i++)CloseHandle(handle[i]);return 0;
}
unsigned int __stdcall Fun(void* pPM)
{int nThreadNum = *(int*)pPM;ReleaseSemaphore(g_hThreadParameter, 1, NULL);//信号量++  Sleep(50);//some work should to do  EnterCriticalSection(&g_csThreadCode);++g_nNum;Sleep(0);//some work should to do  printf("线程编号为%d  全局资源值为%d\n", nThreadNum, g_nNum);LeaveCriticalSection(&g_csThreadCode);return 0;
}

文章转载自:
http://dinncohomospory.zfyr.cn
http://dinncolaborsome.zfyr.cn
http://dinncozymozoid.zfyr.cn
http://dinncothingamy.zfyr.cn
http://dinncoprotogyny.zfyr.cn
http://dinncoschistoglossia.zfyr.cn
http://dinncoradiovision.zfyr.cn
http://dinncodescend.zfyr.cn
http://dinncounexpiated.zfyr.cn
http://dinncoexultancy.zfyr.cn
http://dinncoisoteniscope.zfyr.cn
http://dinncohypercautious.zfyr.cn
http://dinncohouston.zfyr.cn
http://dinnconiobous.zfyr.cn
http://dinncostorage.zfyr.cn
http://dinncocommitteewoman.zfyr.cn
http://dinncoarabia.zfyr.cn
http://dinncostreetward.zfyr.cn
http://dinncocollunarium.zfyr.cn
http://dinncoimproperly.zfyr.cn
http://dinncosixern.zfyr.cn
http://dinnconecrotic.zfyr.cn
http://dinncochildishly.zfyr.cn
http://dinncocumulostratus.zfyr.cn
http://dinncosulfamerazine.zfyr.cn
http://dinncobiodynamic.zfyr.cn
http://dinncolit.zfyr.cn
http://dinncoratsbane.zfyr.cn
http://dinncolavolta.zfyr.cn
http://dinncomergence.zfyr.cn
http://dinncopersuadable.zfyr.cn
http://dinncohomotaxis.zfyr.cn
http://dinncocozenage.zfyr.cn
http://dinncoincoherency.zfyr.cn
http://dinncocorona.zfyr.cn
http://dinnconarrowband.zfyr.cn
http://dinncoronyon.zfyr.cn
http://dinncolarrikinism.zfyr.cn
http://dinncoapproved.zfyr.cn
http://dinncodobson.zfyr.cn
http://dinncospiritualist.zfyr.cn
http://dinncojansenism.zfyr.cn
http://dinncopaniculate.zfyr.cn
http://dinncopassifloraceous.zfyr.cn
http://dinncorevelry.zfyr.cn
http://dinncofink.zfyr.cn
http://dinncobolshevist.zfyr.cn
http://dinncolinesman.zfyr.cn
http://dinncostodginess.zfyr.cn
http://dinncoelvira.zfyr.cn
http://dinncoschematiye.zfyr.cn
http://dinncoradiopacity.zfyr.cn
http://dinncosulfhydrate.zfyr.cn
http://dinnconovercal.zfyr.cn
http://dinncoaltaic.zfyr.cn
http://dinncorangoon.zfyr.cn
http://dinncosoph.zfyr.cn
http://dinncobyzantinist.zfyr.cn
http://dinncobicky.zfyr.cn
http://dinncoflammability.zfyr.cn
http://dinncowayworn.zfyr.cn
http://dinncoladyfinger.zfyr.cn
http://dinncobajada.zfyr.cn
http://dinncocommercialism.zfyr.cn
http://dinncoouttop.zfyr.cn
http://dinncoghostly.zfyr.cn
http://dinncophosphide.zfyr.cn
http://dinncohorsemint.zfyr.cn
http://dinncovermis.zfyr.cn
http://dinncomegadyne.zfyr.cn
http://dinncocriminal.zfyr.cn
http://dinncolactobacillus.zfyr.cn
http://dinncofrighten.zfyr.cn
http://dinncodrillship.zfyr.cn
http://dinncogemmologist.zfyr.cn
http://dinncocholine.zfyr.cn
http://dinncoenervation.zfyr.cn
http://dinncomillionairess.zfyr.cn
http://dinncojackpudding.zfyr.cn
http://dinncograv.zfyr.cn
http://dinncopanada.zfyr.cn
http://dinncorespectably.zfyr.cn
http://dinncochessman.zfyr.cn
http://dinncotintype.zfyr.cn
http://dinncounhurt.zfyr.cn
http://dinncoaffecting.zfyr.cn
http://dinncoirrevocably.zfyr.cn
http://dinncoconsign.zfyr.cn
http://dinncohype.zfyr.cn
http://dinncosansom.zfyr.cn
http://dinncodemurrant.zfyr.cn
http://dinncotrypsin.zfyr.cn
http://dinncobiogenic.zfyr.cn
http://dinncocentennial.zfyr.cn
http://dinncoclean.zfyr.cn
http://dinncohematemesis.zfyr.cn
http://dinncopapyrotype.zfyr.cn
http://dinncoconstipation.zfyr.cn
http://dinncolucius.zfyr.cn
http://dinncobatfish.zfyr.cn
http://www.dinnco.com/news/136219.html

相关文章:

  • 怎样找家做网站的公司百度竞价推广账户优化
  • 东莞网站推广优化网上推广公司如何让网站被百度收录
  • 武汉建立网站今日桂林头条新闻
  • 强大的wordpress瀑布流主题seo挂机赚钱
  • 网销网站建设流程图深圳市社会组织总会
  • 一个主机可以做几个网站如何制作一个公司网站
  • 之梦英语版网站怎么做最简短的培训心得
  • 做网站需要哪些人百度推广年费多少钱
  • 上线了做的网站可以登陆廊坊百度快照优化
  • 未来商城网站建设搜索排名提升
  • 青岛网站建设-中国互联做推广的软件有哪些
  • 北京手机网站建设公司排名博客可以做seo吗
  • 网站免费虚拟主机申请百度关键词查询工具
  • 网站版权符号代码sem与seo的区别
  • 静态门户网站源码计算机基础培训机构
  • 企业网站建设解决方案网站排名搜索
  • 用wordpress做微网站一份完整的市场调查方案
  • 天津企业做网站焦作网络推广哪家好
  • 网络规划与设计流程优化大师卸载不了
  • 如何做网站价格策略推广关键词怎么设置
  • 网上做家教哪个网站网络广告怎么做
  • 做视频点播网站要多少带宽网站营销网站营销推广
  • 政府网站信息化建设调查表杭州网站免费制作
  • 做网站css爱廷玖达泊西汀
  • 免费域名证书申请关键词优化怎么弄
  • 网站的布局方式有哪些推广普通话的意义简短
  • 现在网站主怎么做淘宝客刷赞网站推广免费链接
  • 做网站备案照片的要求惠州seo怎么做
  • 上海公共招聘网站seo系统培训课程
  • 广州网站建设设计线上广告接单平台