[C++] socket - 6 [API互斥事件对象实现线程同步]

简介:


 

 

复制代码
/*API互斥事件对象实现线程同步*/
#include<windows.h>
#include<stdio.h>
DWORD WINAPI myfun1(LPVOID lpParameter);//声明线程函数
DWORD WINAPI myfun2(LPVOID lpParameter);
static int a=0;
HANDLE hmutex;//互斥事件对象
int main()
{
    HANDLE h1,h2;//定义句柄变量
    hmutex=::CreateMutex(NULL,FALSE,NULL);//创建互斥事件并返回其句柄
    h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL);//创建线程1
    printf("线程1开始运行!\r\n");
    h2=::CreateThread(NULL,0,myfun2,NULL,0,NULL);//创建线程2
    printf("线程2开始运行!\t\n");
    ::CloseHandle(h1);//关闭线程句柄对象
    ::CloseHandle(h2);
    ::Sleep(100000);
    return 0;
}
DWORD WINAPI myfun1(LPVOID lpParameter)//线程函数
{
    while(1)
    {
        ::WaitForSingleObject(hmutex,INFINITE);//请求互斥事件
        if(a<100)
        {
            ::Sleep(1000);
            a+=1;
            printf("线程1:%d\r\n",a);
            ::ReleaseMutex(hmutex);
        }
        else
        {
            ::ReleaseMutex(hmutex);//释放互斥事件句柄
            break;
        }
    }
    return 0;
}
DWORD WINAPI myfun2(LPVOID lpParameter)
{
    while(1)
    {
        ::WaitForSingleObject(hmutex,INFINITE);//请求事件对象
        if(a<100)
        {
            ::Sleep(1000);
            a+=1;
            printf("线程2:%d\r\n",a);
            ::ReleaseMutex(hmutex);
        }
        else
        {
            ::ReleaseMutex(hmutex);
            break;
        }
    }
    return 0;
}
复制代码


相关文章
|
1月前
|
存储 网络协议 Ubuntu
【C++网络编程】Socket基础:网络通讯程序入门级教程
【C++网络编程】Socket基础:网络通讯程序入门级教程
62 7
|
1月前
|
安全 Java
深入Java并发编程:线程同步与互斥机制
【4月更文挑战第6天】Java并发编程中,确保数据一致性与防止条件竞争是关键。语言提供`synchronized`关键字、`Lock`接口和原子变量等机制处理并发问题。线程同步问题包括竞态条件、死锁和活锁。`synchronized`实现内置锁,`Lock`接口提供更灵活的锁管理,原子变量则支持无锁安全操作。理解并恰当使用这些工具能有效管理并发,避免数据不一致。
|
1月前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
1月前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
99 7
|
1月前
|
Linux API C++
c++多线程——互斥锁
c++多线程——互斥锁
|
1月前
|
C++
C++11 std::lock_guard 互斥锁
C++11 std::lock_guard 互斥锁
15 0
|
3天前
|
API
linux---线程互斥锁总结及代码实现
linux---线程互斥锁总结及代码实现
|
21天前
|
存储 网络协议 数据可视化
C++实现socket通信
了解如何实现socket通信以及TCP连接的过程中发生了什么
27 1
|
22天前
|
安全 Java API
Java 8中的Stream API:简介与实用指南深入理解Java并发编程:线程安全与锁优化
【5月更文挑战第29天】本文旨在介绍Java 8中引入的Stream API,这是一种用于处理集合的新方法。我们将探讨Stream API的基本概念,以及如何使用它来简化集合操作,提高代码的可读性和效率。 【5月更文挑战第29天】 在Java并发编程中,线程安全和性能优化是两个核心议题。本文将深入探讨如何通过不同的锁机制和同步策略来保证多线程环境下的数据一致性,同时避免常见的并发问题如死锁和竞态条件。文章还将介绍现代Java虚拟机(JVM)针对锁的优化技术,包括锁粗化、锁消除以及轻量级锁等概念,并指导开发者如何合理选择和使用这些技术以提升应用的性能。
|
1天前
|
缓存 网络协议 Linux
c++实战篇(三) ——对socket通讯服务端与客户端的封装
c++实战篇(三) ——对socket通讯服务端与客户端的封装