多线程同步一般可以使用:
1.临界区(CRITICAL_SECTION):
临界区并不是内核对象,它存放在进程内部,所以不能跨进程。不用create和closehandle,直接init和delete就可以
它是轻量级的,效率可能是其他内核对象100倍
但是一个线程意外结束,未调用leave时,回导致其他线程一直不能访问被锁定资源
同一个线程在leave之前,可以多次进入临界区,但是要记得进入几次就要leave几次,否则其他线程不能访问
千万不要在临界区内调用sleep和wait函数
2.互斥器(Mutexes)
一个内核对象,可以跨进程使用
如果拥有这个对象的进程结束,会产生一个abandoned的错误信息
在跨进程使用的时候可以使用命名的方式,该命名系统唯一
该对象只能被拥有的线程释放
3.信号量(Semaphore):
和mutexes一样,是核心对象,mutexes是其特殊情况
没有拥有线程一说
也是通过命名为其他进程共享
可以被任意一个线程释放
4.时间对象(event object)
内核对象,可以跨进程使用
可以通过set和reset完全掌控其状态
可以通过具名来实现多进程共享
5.对简单的变量可以使用 interlockedincrement,interlockeddecrement