竞态条件:当两个或更多的实体访问修改某共享资源时,最终的结果取决于进程的执行顺序。
避免竞态条件:互质,即一种能够独占访问共享对象的机制
临界区:程序中能够访问共享内存的部分
为了避免竞态条件,必须确保一次或者某一时刻只能有一个进程进入临界区。为了使用共享数据,必须处理好4个条件:
1.不允许同时有两个进程在临界区内;
2.不得对CPU的速度或者数量进行假设;
3.在临界区外运行的进程不得阻碍其他进程;
4.不得有任何进程处于永远等待进入临界区。
常用函数:
1.CreateMutex()
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,
BOOL bInitialOwner,
LPCTSTR lpName
);
该函数用以创建一个已命名或未命名的互斥对象。
lpMutexAttributes
[in]忽略。必须为NULL。
bInitialOwner
[in] Boolean,指定互斥对象的初始所有者。如果此值为TRUE且调用者创建了互斥锁,则调用线程将获取互斥锁对象的所有权。否则,调用线程不会获得互斥锁的所有权。要确定调用者是否创建了互斥锁,请参阅“返回值”部分。
lpName
[in]指向以空字符结尾的字符串的长指针,指定互斥锁对象的名称。该名称仅限于MAX_PATH字符,并且可以包含除反斜杠路径分隔符(\)之外的任何字符。名称比较区分大小写。
如果lpName与现有命名互斥对象的名称匹配,则忽略bInitialOwner参数,因为它已由创建过程设置。
如果lpName为NULL,则创建没有名称的互斥对象。