互斥
相关问题
多线程下代码或资源的共享使用。
互斥的使用
1.创建互斥
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,//安全属性(废弃参数,置NULL)
BOOL bInitialOwner,//初始的拥有者TRUE/FALSE
LPCTSTR lpName //命名
);//创建成功返回互斥句柄
可等候的句柄,具备有信号和无信号的特点
bInitialOwner
TRUE-那个线程创建就那个线程具有互斥
FALSE-任何线程都不拥有它
特性:
a.独占性-在某个时间点上,只有一个线程拥有互斥,别的线程等待,除非这个线程扔掉后,别的线程才会拥有互斥
b.所有线程都没有互斥时,线程句柄有信号,如果有一个线程拥有互斥,线程句柄无信号
2.等候互斥
WaitFor… 互斥的等候遵循谁先等候谁先获取。
谁先等候,谁先获得互斥
3.释放互斥
BOOL ReleaseMutex(
HANDLE hMutex //互斥句柄
);
4.关闭互斥句柄
CloseHandle
错误示例代码(混乱)
#include
#include
DWORD CALLBACK myThreadProc1(LPVOID lpParam)
{
char* szText = (char*)lpParam;
while(1)
{
//printf("%s\n",szText);
for(int i = 0; i < strlen(szText);i++)
{
printf("%c",szText[i]);
Sleep(150);
}
printf("\n");
}
}
DWORD CALLBACK myThreadProc2