windows线程同步的几种方式
以下为main函数的测试代码 具体线程同步的实现代码请下载:https://github.com/kingsunc/ThreadSynchro
#include <stdio.h>
#include <process.h>
#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 = ; #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;
#endif void __cdecl ThreadProc(void* para)
{
printf("sub thread started\n");
for (int i = ; 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 = ; i < THREAD_COUNT; i++)
{
hThread[i] = (HANDLE)_beginthread(ThreadProc, , NULL);
} for (int i = ; 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");
}
windows线程同步的几种方式的更多相关文章
- IOS 多线程,线程同步的三种方式
本文主要是讲述 IOS 多线程,线程同步的三种方式,更多IOS技术知识,请登陆疯狂软件教育官网. 一般情况下我们使用线程,在多个线程共同访问同一块资源.为保护线程资源的安全和线程访问的正确性. 在IO ...
- Java线程同步的四种方式详解(建议收藏)
Java线程同步属于Java多线程与并发编程的核心点,需要重点掌握,下面我就来详解Java线程同步的4种主要的实现方式@mikechen 目录 什么是线程同步 线程同步的几种方式 1.使用sync ...
- C++线程同步的四种方式(Windows)
为什么要进行线程同步? 在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作.更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解.正常情况下对这种处理结果的 ...
- C++实现线程同步的几种方式
线程同步是指同一进程中的多个线程互相协调工作从而达到一致性.之所以需要线程同步,是因为多个线程同时对一个数据对象进行修改操作时,可能会对数据造成破坏,下面是多个线程同时修改同一数据造成破坏的例子: # ...
- C++ 线程同步的四种方式
程之间通信的两个基本问题是互斥和同步. (1)线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒. (2)线程互 ...
- 关于windows线程同步的四种方法
#include "stdafx.h" #include "iostream" #include "list" #include " ...
- Linux学习笔记21——线程同步的两种方式
一 用信号量同步 1 信号量函数的名字都以sem_开头,线程中使用的基本信号量函数有4个 2 创建信号量 #include<semaphore.h> int sem_init(sem_t ...
- 【Linux】多线程同步的四种方式
背景问题:在特定的应用场景下,多线程不进行同步会造成什么问题? 通过多线程模拟多窗口售票为例: #include <iostream> #include<pthread.h> ...
- java笔记--关于线程同步(7种同步方式)
关于线程同步(7种方式) --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3897440.html"谢谢-- 为何要使用同步? ...
随机推荐
- [Note]prufer
[Note]Prufer编码 实现 不断删除度数为\(1\)的最小序号的点,并输出与其相连的节点的序号,直至树中只有两个节点. 性质 任何一棵\(n\)节点的树都可以唯一的用长度为\(n-2\)的pr ...
- django orm查询和后端缓存的使用
django orm 查询 1 字段后(db_column='age') (null=True)#表示数据库里面的该字段数据可以为空 (blank=True)#表示前端表单提交的时候可以为空 (db_ ...
- Python开发坦克大战
Python不仅能开发网站,爬虫数据分析等,他其实也可以写游戏,接下来就给大家分享下坦克大战的代码: PS:很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此 ...
- jdbc url的若干参数
参数名称 参数说明 缺省值 最低版本要求 user 数据库用户名,用于连接数据库 无 所有版本 password 用户密码(用于连接数据库) 无 所有版本 useUnicode 是否使用Unicode ...
- Spring作用域和BeenFactory
1.Spring Bean实例作用域: ① singleton: IOC容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例. ② prototype: IOC容器可以创建多个 ...
- ubuntu 报错 Unable to locate package
解决方案参考 https://blog.csdn.net/u010622613/article/details/83017163
- LED Holiday Light - Color Creation Of LED Christmas Lights
In the long and interesting history of Christmas lights, nothing is brighter than light-emitting dio ...
- Codeforces Round #570 (Div. 3) B. Equalize Prices
原文链接https://codeforces.com/contest/1183/problem/B 题意:进行Q组测试,在每组中有长度为n的数组a[i],然后现在给你一个K,问你找到一个bi使得|ai ...
- Vue的iview组件框架select远程搜索,选中后不刷新的问题
1.场景:弹框内有一个下拉组件(支持搜索),当选择完数据后弹框关闭,再次打开后,下拉框内的数据是刚才选中的数据.原因:分析后觉得是搜索内容没有清空,导致下拉的数据只有一个 2.解决方案 a .解决:调 ...
- H5 App设计者需要注意的问题
我们通常在做H5 APP设计的过程中,遇到很多看似很小,且很容易被忽略的问题,正是这些小问题,一次次的撩拨用户的耐心,让用户对你的APP心生怨念.现在WeX5君呕血为大家整理出H5 APP设计的21条 ...