以下为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线程同步的几种方式的更多相关文章

  1. IOS 多线程,线程同步的三种方式

    本文主要是讲述 IOS 多线程,线程同步的三种方式,更多IOS技术知识,请登陆疯狂软件教育官网. 一般情况下我们使用线程,在多个线程共同访问同一块资源.为保护线程资源的安全和线程访问的正确性. 在IO ...

  2. Java线程同步的四种方式详解(建议收藏)

    ​ Java线程同步属于Java多线程与并发编程的核心点,需要重点掌握,下面我就来详解Java线程同步的4种主要的实现方式@mikechen 目录 什么是线程同步 线程同步的几种方式 1.使用sync ...

  3. C++线程同步的四种方式(Windows)

    为什么要进行线程同步? 在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作.更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解.正常情况下对这种处理结果的 ...

  4. C++实现线程同步的几种方式

    线程同步是指同一进程中的多个线程互相协调工作从而达到一致性.之所以需要线程同步,是因为多个线程同时对一个数据对象进行修改操作时,可能会对数据造成破坏,下面是多个线程同时修改同一数据造成破坏的例子: # ...

  5. C++ 线程同步的四种方式

    程之间通信的两个基本问题是互斥和同步. (1)线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒. (2)线程互 ...

  6. 关于windows线程同步的四种方法

    #include "stdafx.h" #include "iostream" #include "list" #include " ...

  7. Linux学习笔记21——线程同步的两种方式

    一  用信号量同步 1 信号量函数的名字都以sem_开头,线程中使用的基本信号量函数有4个 2 创建信号量 #include<semaphore.h> int sem_init(sem_t ...

  8. 【Linux】多线程同步的四种方式

    背景问题:在特定的应用场景下,多线程不进行同步会造成什么问题? 通过多线程模拟多窗口售票为例: #include <iostream> #include<pthread.h> ...

  9. java笔记--关于线程同步(7种同步方式)

    关于线程同步(7种方式) --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3897440.html"谢谢-- 为何要使用同步? ...

随机推荐

  1. How to do high impact research + 实事求是

    1. develop a strong publications record early, so do what you can to make that happen. 2. 粗读:abstrac ...

  2. npm 升级到最新版本

    先npm -v查看自己的npm 是否是最新版本,如果不是则进入安装node的文件夹,可通过 where node 查找该文件夹. 进入之后使用: npm i npm -g 之后使用: npm -v 查 ...

  3. 解决pjax重复绑定

    个人博客 地址:http://www.wenhaofan.com/article/20180929002529 1.所有js统一在pjax容器外引入 在pjax容器外引入的js只会被引入一次,所以不会 ...

  4. doctype的意思

    <!DOCTYPE HTML>这句话在整个网页的最上头,意思是这个网页是一个用html5语法写的,因为还有html4和xhtml等语法. 为了兼容一些旧的页面,浏览器设置了两种解析模式:1 ...

  5. 一则关于控制文件全部丢失后如何重新编目RMAN元数据的简单实验

    主题:一则简单的RMAN元数据编目实验,来自于博客园AskScuti. 场景:RMAN备份完整情况下,未使用Catalog目录库.删除了所有的控制文件,在手工重建后,导致记录在控制文件中的RMAN备份 ...

  6. MS SQL Server 2014,sa登录失败问题

    1.用Windows身份验证登录 2.服务器属性-安全性  3.进入服务,重启所有SQL服务

  7. java List 排序,升序,降序

    import java.util.*; public class EntrySets { public static void main(String[] args) { Map<Object, ...

  8. JS jQuery 点击页面弹出文字

    <style> .animate{ animation:myfirst 3s; -moz-user-select:none;/*火狐*/ -webkit-user-select:none; ...

  9. Django - installing mysqlclient error: mysqlclient 1.3.13 or newer is required; you have 0.9.3

    环境 Deepin Linux 15.11 Django 2.2 pymysql0.9.3 原因 因为用pymysql替换了默认的mysqlclient,Django官方推荐的数据库API drive ...

  10. python面试的100题(3)

    3.输入日期, 判断这一天是这一年的第几天? import datetime def dayofyear(): year = input("请输入年份: ") month = in ...