互斥器mutex

    对于多线程,当一个线程1在访问一个资源A的时候,
    其他线程不能再对资源A进行访问!
    必须等到线程1不在访问资源A的时候,其他线程才能去访问资源A。
==>这就需要做:在多个线程之间做一个同步!

 

 1.创建一个互斥器对象

    hMutex=CreateMutex(NULL,TRUE,NULL);
    参数1(安全属性):
            NULL-使用默认的安全性;
    参数2(当前创建的这个互斥器的初始拥有者):
            TRUE-调用者创建这个互斥器,调用线程获得互斥器的所有权;
            FALSE-当前调用线程不获取互斥器的所有权;
    参数3(互斥器名称):给创建出来的互斥器/对象,起的一个名字;
            NULL-创建一个没有名字的互斥对象;
    返回值:这个互斥对象的句柄;

    2.重要内容声明
    2.1 互斥对象(mutex)属于内核对象,它能够确保线程
        拥有对单个资源的互斥访问权;
    2.2 互斥对象包含:1个使用数量、1个线程ID、1个计数器;
    2.3 ID:用于标识系统中的哪个线程拥有当前的互斥对象;
        计数器:用于指明该线程拥有互斥器对象的次数;

 

#include 
//#include 
#include 

using namespace std;

DWORD WINAPI Fun1Proc(
  LPVOID lpParameter   // thread data
);DWORD WINAPI Fun2Proc(
  LPVOID lpParameter   // thread data
);
int index=0;
int tickets=100; //此时,2个线程会访问同一个变量,所以会出问题
HANDLE hMutex;
void main()
{
    HANDLE hThread1;
    HANDLE hThread2;
    hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
    hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
    CloseHandle(hThread1);
    CloseHandle(hThread2);
    /*while(index++<1000)
        cout<<"main thread is running"<0) 
            {
                Sleep(1);
                cout<<"thread1 sell ticket : "<0)
            {
                Sleep(1);
                cout<<"thread2 sell ticket : "<

 

你可能感兴趣的:(线程)