博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows线程同步的几种方式
阅读量:4983 次
发布时间:2019-06-12

本文共 2007 字,大约阅读时间需要 6 分钟。

以下为main函数的测试代码 具体线程同步的实现代码请下载:

 

#include 
#include
#include "MyObject.h"#include "MyCriticalSection.h"#include "MyInterLock.h"#include "MyRWLock.h"#include "MySemaphore.h"#include "MyMutex.h"#include "MyEvent.h"#define MY_NOSYNCHRO_TEST // 不进行线程同步;// 用户态-同步方式;//#define MY_INTERLOCK_TEST // 原子操作;//#define MY_CRITICALSECTION_TEST // 临界区;//#define MY_SRWLOCK_TEST // 读写锁;// 内核态-同步方式;//#define MY_SEMAPHORE_TEST // 信号量;//#define MY_MUTEX_TEST // 互斥量;//#define MY_EVENT_TEST // 事件;long g_lCount = 0;#define THREAD_COUNT 10 // 线程数;#define ACCESS_TIMES 100000 // 访问共享变量的次数,增大其值,增加数据竞争发生的可能性;#ifdef MY_NOSYNCHRO_TEST CMyObject g_myLock;#endif#ifdef MY_CRITICALSECTION_TEST CMyCriticalSection g_myLock;#endif#ifdef MY_SRWLOCK_TEST CMyRWLock g_myLock;#endif#ifdef MY_SEMAPHORE_TEST CMySemaphore g_myLock;#endif#ifdef MY_MUTEX_TEST CMyMutex g_myLock;#endif#ifdef MY_EVENT_TEST CMyEvent g_myLock;#endifvoid __cdecl ThreadProc(void* para){ printf("sub thread started\n"); for (int i = 0; i < ACCESS_TIMES; i++) {#ifdef MY_INTERLOCK_TEST CMyInterLock::Increment(&g_lCount);#else g_myLock.Lock(); ++g_lCount; g_myLock.UnLock();#endif } printf("sub thread finished\n"); _endthread(); // 可以省略,隐含会调用; }// 测试函数;void Thread_Test(){ HANDLE hThread[THREAD_COUNT]; for (int i = 0; i < THREAD_COUNT; i++) { hThread[i] = (HANDLE)_beginthread(ThreadProc, 0, NULL); } for (int i = 0; i < THREAD_COUNT; i++) { WaitForSingleObject(hThread[i], INFINITE); } // 检查结果; printf("g_lCount: %d\n", g_lCount); if (g_lCount == ACCESS_TIMES*THREAD_COUNT) { printf("Correct Result!\n"); } else { printf("Error Result!\n"); }}int main(){ Thread_Test(); system("pause");}

 

转载于:https://www.cnblogs.com/Kingfans/p/6496698.html

你可能感兴趣的文章
PHP内核研究(内存管理1)
查看>>
hdu 2547
查看>>
[恢]hdu 2504
查看>>
关于golang.org/x包问题
查看>>
PHP $_SERVER['PHP_SELF']、$_SERVER['SCRIPT_NAME'] 与 $_SERVER['REQUEST_URI'] 之间的区别
查看>>
第一次过程性考核
查看>>
linux 安装 mysql
查看>>
Java中HashMap,LinkedHashMap,TreeMap的区别
查看>>
老菜鸟说给新菜鸟的存储基础知识
查看>>
web.xml详解
查看>>
插入排序
查看>>
浅谈微信公众平台运用的场景
查看>>
Moctf--Pubg题目
查看>>
ORM框架与mysql数据库的无缝对接
查看>>
在centos上使用yum安装rabbitmq-server
查看>>
SpringBoot项目如何打War包
查看>>
Managing Dynamic Objects in C++
查看>>
计算excel列的名字
查看>>
自助Linux之问题诊断工具strace
查看>>
JDBC为什么要使用PreparedStatement而不是Statement
查看>>