Windows C语言 实现线程同步 互斥量 信号量 及两种的区别

互斥量与信号量实现方法类似:

 互斥量:

               HANDLE hMutex = NULL;//在全局中定义一个句柄

               hMutex = CreateMutex(NULL,FALSE,NULL); //建立互斥量

               if (WaitForSingleObject(hMutex, INFINITE) == WAIT_OBJECT_0)//判断现在是否可占有互斥对象,INFINITE表示等待时间

               ReleaseMutex(hMutex);//使用后释放互斥量

               WaitForSingleObject,ReleaseMutex,就是在两个线程中存在资源占用冲突时使用。

信号量:

             HANDLE h_ThreadSem = NULL;

             h_ThreadSem = CreateSemaphore(NULL,0,1,NULL);//第二个参数表示初始信号量数量,第三个参数表示信号量数量最大值

             if (WaitForSingleObject(h_ThreadSem, INFINITE) == WAIT_OBJECT_0)

             ReleaseSemaphore(h_ThreadSem,1,NULL);//信号量数量加一

互斥量与信号量的区别:

             互斥量是保护资源在同一时刻只有一个访问者能够访问,但不考虑顺序性。

             信号量会控制访问者的先后顺序,相当于信号量在完成互斥量功能的前提下,可以有序甚至多个同时访问。

             互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到。

发布了16 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Hilaph/article/details/104892929
今日推荐