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

怎样免费做彩票网站新闻稿发布软文平台

怎样免费做彩票网站,新闻稿发布软文平台,集团公司成立条件,河南英文网站建设公司公开视频 - 链接点击跳转公开课程博客首页 - 链接点击跳转博客主页 目录 竞态条件 CriticalSection Mutex CriticalSection Mutex Semaphore Event 竞态条件 多线程环境下#xff0c;当多个线程同时访问或者修改同一个数据时#xff0c;最终结果为线程执…公开视频 - 链接点击跳转公开课程博客首页 - 链接点击跳转博客主页 目录 竞态条件 CriticalSection Mutex CriticalSection Mutex Semaphore Event 竞态条件 多线程环境下当多个线程同时访问或者修改同一个数据时最终结果为线程执行的时许。 如果没有同步机制会发生竞态条件可能导致数据不准确或者程序发生异常等。 #include iostream #include windows.hDWORD g_Num 0;DWORD WINAPI WorkThread(LPVOID lp) {for (size_t i 0; i 10000000; i){//g_Num;__asm LOCK INC [g_Num] }return 0; }int main() {HANDLE hThread[2] { 0 };hThread[0] CreateThread(NULL, 0, WorkThread, NULL, 0, NULL);hThread[1] CreateThread(NULL, 0, WorkThread, NULL, 0, NULL);WaitForMultipleObjects(2, hThread, TRUE, -1);std::cout g_Num std::endl;return 0; }CriticalSection #include iostream #include windows.hDWORD g_Num 0; CRITICAL_SECTION cs { 0 };DWORD WINAPI WorkThread(LPVOID lp) {for (size_t i 0; i 1000000; i){// 进入临界区EnterCriticalSection(cs);// TODOg_Num;// 退出临界区LeaveCriticalSection(cs);}return 0; }int main() {HANDLE hThread[2] { 0 };// 初始临界区InitializeCriticalSection(cs);hThread[0] CreateThread(NULL, 0, WorkThread, NULL, 0, NULL);hThread[1] CreateThread(NULL, 0, WorkThread, NULL, 0, NULL);WaitForMultipleObjects(2, hThread, TRUE, -1);std::cout g_Num std::endl;// 清理临界区DeleteCriticalSection(cs);return 0; } Mutex 互斥体(Mutex)用于防止多个线程同时访问或修改共享资源。 同一时刻下只有一个线程可以拥有互斥体的所有权如果一个线程拥有了互斥体的所有权则其他请求该互斥体的线程将会被阻塞直到互斥体权限释放。 创建互斥体 - CreateMutex 请求互斥体 - WaitForSingleObject 释放互斥体 - ReleaseMutex #include iostream #include windows.hHANDLE hMutex 0; DWORD g_Num 0;DWORD WINAPI WorkThread(LPVOID lp) {for (size_t i 0; i 100000; i){WaitForSingleObject(hMutex, INFINITE);g_Num;ReleaseMutex(hMutex);}return 0; }int main() {hMutex CreateMutex(NULL, FALSE, NULL); HANDLE hThread1 CreateThread(NULL, 0, WorkThread, NULL, 0, NULL);HANDLE hThread2 CreateThread(NULL, 0, WorkThread, NULL, 0, NULL);WaitForSingleObject(hThread1, INFINITE);WaitForSingleObject(hThread2, INFINITE);CloseHandle(hThread1);CloseHandle(hThread2);CloseHandle(hMutex);std::cout g_Num std::endl;return 0; } CriticalSection Mutex 临界区 共享资源的线程同步机制临界区在同一进程的线程之间提供了互斥访问。 每个线程在访问共享资源之前必须先能够进入临界区在访问结束后离开临界区完成线程同步。 互斥体 线程同步机制用来限制多个线程同时访问共享资源。 互斥体可以同步进程或者线程且可以跨进程同步。 #include iostream #include Windows.hint main() {HANDLE hMutex CreateMutex(NULL, FALSE, L0xCC_Mutex);if (hMutex NULL) return 0;if (GetLastError() ERROR_ALREADY_EXISTS){MessageBox(NULL, L禁止多开, L错误, MB_OKCANCEL);return 0;}std::cout Game Start... std::endl;system(pause);CloseHandle(hMutex);return 0; } 性能 临界区在同一进程的线程中比互斥体更快。 功能 互斥体可以跨进程同步但临界区只能够在同一个进程下的线程之间进行同步。 所有权 互斥体有严格的所有权要求只有拥有互斥体权限的线程才能够释放它。 死锁 当线程在持有锁的情况下意外死亡(异常)如果线程在持有临界区锁的情况下意外终结这个锁不会被释放导致其他等待该临界区的线程无法正常执行造成死锁。 #include iostream #include Windows.hCRITICAL_SECTION CriticalSection { 0 };DWORD WINAPI WorkThread(LPVOID lp) {EnterCriticalSection(CriticalSection);printf(TID - %d \r\n, GetCurrentThreadId());Sleep(5000);LeaveCriticalSection(CriticalSection);return 0; }int main() {InitializeCriticalSection(CriticalSection);HANDLE hThread1 CreateThread(NULL, 0, WorkThread, NULL, 0, NULL);Sleep(1000);TerminateThread(hThread1, 1);HANDLE hThread2 CreateThread(NULL, 0, WorkThread, NULL, 0, NULL);WaitForSingleObject(hThread2, INFINITE);DeleteCriticalSection(CriticalSection);return 0; } 如果线程在持有互斥体锁的情况下意外终结Windows会自动释放其所有权使得其他线程可以继续正常执行。 #include iostream #include Windows.hHANDLE hMutex NULL;DWORD WINAPI WorkThread1(LPVOID lp) {WaitForSingleObject(hMutex, INFINITE);printf(TID - %d \r\n, GetCurrentThreadId());Sleep(5000);TerminateThread(GetCurrentThread(), -1);//todoreturn 0; }DWORD WINAPI WorkThread2(LPVOID lp) {printf(Wait For Thread1 Leave\r\n);WaitForSingleObject(hMutex, INFINITE);printf(TID - %d \r\n, GetCurrentThreadId());ReleaseMutex(hMutex);return 0; }int main() {hMutex CreateMutex(NULL, FALSE, NULL);HANDLE hThread1 CreateThread(NULL, 0, WorkThread1, NULL, 0, NULL);Sleep(1000);HANDLE hThread2 CreateThread(NULL, 0, WorkThread2, NULL, 0, NULL);WaitForSingleObject(hThread2, INFINITE);CloseHandle(hMutex);CloseHandle(hThread1);CloseHandle(hThread2);return 0; } Semaphore 信号量是一种同步对象用于控制多个线程对共享资源的访问。它是一个计数器用来表示可用资源的数量。当信号量的值大于0它表示有资源可用当值为0表示没有可用资源。 等待试图减少信号量的值。如果信号量的值大于0减1并继续执行。如果信号量的值为0则线程阻塞直到信号量的值变为大于0。 释放增加信号量的值。如果有其他线程因等待这个信号量而阻塞它们中的一个将被唤醒。 创建信号量 在 Windows 系统中使用 CreateSemaphore 或 CreateSemaphoreEx 函数创建信号量。 等待Wait和释放Release信号量 等待信号量通常使用 WaitForSingleObject 或 WaitForMultipleObjects 函数。 释放信号量使用 ReleaseSemaphore 函数。 #include iostream #include Windows.h#define MAX_COUNT_SEMAPHORE 3HANDLE g_SemapHore NULL; HANDLE g_hThreadArr[10] { 0 };DWORD WINAPI WorkThread(LPVOID lp) {WaitForSingleObject(g_SemapHore, INFINITE);for (size_t i 0; i 10; i){std::cout COUNT - (int)lp std::endl;Sleep(500);}ReleaseSemaphore(g_SemapHore, 1, NULL);return 0; }int main() {g_SemapHore CreateSemaphore(NULL, //安全属性MAX_COUNT_SEMAPHORE, //初始计数MAX_COUNT_SEMAPHORE, //最大计数NULL //信号名称);if (g_SemapHore NULL){std::cout GetLastError() std::endl;return 1;}for (size_t i 0; i 10; i){g_hThreadArr[i] CreateThread(NULL,0,WorkThread,(LPVOID)i,0,NULL);}WaitForMultipleObjects(10, g_hThreadArr, TRUE, INFINITE);//closehandlereturn 0; } Event 在Windows编程中事件是一种同步机制用于在多个线程之间发送信号。事件对象可以是手动重置或自动重置。 手动重置事件Manual Reset Event当事件被设置signaled后它将保持这个状态直到显式地被重置。这意味着多个等待该事件的线程都可以在事件被重置之前被唤醒。 自动重置事件Auto Reset Event当事件被一个等待的线程接收signaled后系统会自动将事件状态重置为非信号状态non-signaled。这意味着每次只允许一个线程被唤醒。 创建事件 使用Windows API函数CreateEvent可以创建一个事件对象 lpEventAttributes指向安全属性的指针如果设置为NULL则使用默认安全性。 bManualReset如果为TRUE则创建一个手动重置事件否则创建自动重置事件。 bInitialState如果为TRUE则初始状态为信号状态如果为FALSE则为非信号状态。 lpName事件的名称。 设置事件将事件状态设置为信号状态使用SetEvent函数 重置事件将事件状态设置为非信号状态使用ResetEvent函数 等待事件 等待一个事件对象变为信号状态使用WaitForSingleObject函数 #include iostream #include Windows.hDWORD WINAPI WorkThread(LPVOID lp) {HANDLE hEvent *(HANDLE*)lp;std::cout Thread - GetCurrentThreadId() Waiting For Event std::endl;WaitForSingleObject(hEvent, INFINITE);std::cout Thread - GetCurrentThreadId() actived std::endl;return 0; }int main() {HANDLE hThreads[3] { 0 };HANDLE hEvent NULL;hEvent CreateEvent(NULL, TRUE, FALSE, NULL);if (hEvent NULL) return 0;for (size_t i 0; i 3; i){hThreads[i] CreateThread(NULL, 0, WorkThread, hEvent, 0, NULL);}Sleep(2000);SetEvent(hEvent);WaitForMultipleObjects(3, hThreads, TRUE, INFINITE);CloseHandle(hEvent);return 0; }
http://www.dnsts.com.cn/news/148311.html

相关文章:

  • 哔哩哔哩网站建设分析公司网站建设费属于宣传费吗
  • 织梦做网站如何套取别人网站的模板怎么修改网站模板
  • 南宁网站建设网站族蚂建站
  • 网站首页顶部图片尺寸潜江资讯网二手车
  • 个人网站的设计与实现的任务书建设手机行网站
  • 保定电子网站建设义乌微信网站建设费用
  • excel如何做超链接网站网站建设 网页设计 的文章
  • 网站建设推广费用广告公司有哪些
  • 手机直接看的网站有哪些长沙网络营销类岗位
  • 广州越秀区风险等级seo怎样才能优化网站
  • 网站全能空间成全视频免费观看在线看下载动漫
  • 手机上怎么做能打开的网站吗discuz是什么
  • 成都市那里有网站建设制作公司手机参数网
  • 天府新区规划建设国土局网站东莞关键词seo优化
  • 中建西部建设广通讯网站wordpress游客评论
  • 福州正规网站建设公司推荐涿州规划建设局网站
  • APP加网站建设预算多少钱最好看的免费观看全集电视剧
  • seo网站后台管理上海十大装修公司
  • 怎样才能把网站做好网站与网页设计
  • dedecms本地调试好的网站怎么上传到服务器自建电梯费用
  • 网站联盟接口怎么做网络推广员的工作内容和步骤
  • 什么企业做网站wordpress 后台修改模板
  • 静态网站建设的技术运用wordpress编辑图像
  • 仪表东莞网站建设电商网站开发会遇到哪些问题
  • 手机怎么制作自己的网站做任务用手机号登录网站
  • 本地门户网站源码wordpress主题门户一号
  • 鄂州第一官方网站红谷滩园林建设集团网站
  • 买个域名自己做网站吗360竞价推广
  • 中文域名网站好不好优化企业网站需要备案吗
  • wap网站自动怎么修改网页上的内容