Summary:
对于多线程编程,一个很重要的问题就是解决由数据共享引起的数据竞争的问题,通过一定的线程同步的方法能避免数据竞争。在Win32多线程中,同步方法包括用户态同步方式:InterLock、CriticalSection、SRWLock和内核态同步方式:Event、Semaphore、Mutex等。
本文主要目的是收集这些同步的方法和涉及到API的含义和使用,可能不会涉及到更深入的比如何时使用何种方式更好以及为什么,更深入的问题,单独在以后积累并记录。
一、数据竞争的例子
在分析同步的方法之前,先给出要解决的数据竞争的例子:
- #include "stdafx.h"
- #include
- #include
- #include
- long g = 0;
- #define THREAD_COUNT 10 // 线程数
- #define ACCESS_TIMES 10000000 // 访问共享变量的次数,增大其值,增加数据竞争发生的可能性
- void __cdecl ThreadProc(void *para)
- {
- printf("sub thread started\n");
- for (int i = 0;i
关注打赏
立即登录/注册


微信扫码登录